@@ -51,34 +51,40 @@ func Run() {
5151 }()
5252 }
5353
54- ctx , cancel := context . WithTimeout (context .Background (), 10 * time . Second )
55- defer cancel ()
56- common .Logger .Info ("Start running " )
54+ ctx , stop := signal . NotifyContext (context .TODO (), syscall . SIGINT , syscall . SIGTERM , os . Interrupt )
55+ defer stop ()
56+ common .Logger .Info ("Starting... " )
5757 dao .InitDB (ctx )
5858 defer func () {
5959 if err := dao .Client .Disconnect (ctx ); err != nil {
6060 common .Logger .Fatal (err )
61- os .Exit (1 )
6261 }
6362 }()
64- service .InitService ()
63+ service .InitService (ctx )
64+ sources .InitSources (service .NewService ())
65+ storage .InitStorage (ctx )
6566 if config .Cfg .Telegram .Token != "" {
66- go telegram .RunPolling ()
67+ telegram .RunPolling (ctx )
6768 }
68- storage .InitStorage ()
69- sources .InitSources (service .NewService ())
70- go fetcher .StartScheduler (context .TODO ())
69+
70+ go fetcher .StartScheduler (ctx )
7171 if config .Cfg .API .Enable {
72- go restful .Run ()
72+ restful .Run (ctx )
7373 }
74- quit := make (chan os.Signal , 1 )
75- signal .Notify (quit , syscall .SIGINT , syscall .SIGTERM )
76- sig := <- quit
77- common .Logger .Info (sig , " Exiting..." )
74+
75+ common .Logger .Info ("ManyACG is running !" )
76+
7877 defer common .Logger .Info ("Exited." )
79- if err := service .Cleanup (context .TODO ()); err != nil {
78+ <- ctx .Done ()
79+ cleanCtx , cancel := context .WithTimeout (context .Background (), 30 * time .Second )
80+ defer cancel ()
81+ if err := service .Cleanup (cleanCtx ); err != nil {
8082 common .Logger .Error (err )
8183 }
84+ cleanCacheDir ()
85+ }
86+
87+ func cleanCacheDir () {
8288 if config .Cfg .Storage .CacheDir != "" && ! config .Cfg .Debug {
8389 for _ , path := range []string {"/" , "." , "\\ " , ".." } {
8490 if filepath .Clean (config .Cfg .Storage .CacheDir ) == path {
0 commit comments