Daemon olmayan bir programda çalışan bir C ++ programım var (ancak değişebilir) ve onu systemd ile kontrol ediyorum. Bu çalışır. Bunu yeniden başlatmak için çirkin de olsa, ya kök olmam gerekiyor (systemctl yeniden başlatmayı kullanmak için) ya da öldür -9 (benim gibi çalıştığından beri). Centos 6'yı yönetiyorum.
Program yeniden başlatıldığında ne yapmak istediğinizi sıkıştırmak ve günlük dosyalarını kaldırmak. Sıkıştırma bölümü çalışıyor, ancak program çalışırken günlük dosyaları sık sık kilitleniyor ve hizmet dosyamı nasıl alacağımı çözemiyorum:
- programı durdur
- günlük dosyalarını sıkıştır
- programı başlat
Listener.service dosyam şöyle görünüyor:
[Unit]
Description=Listener - main Digiflex server program
# start only once the network subsystems are available
After=network.target
[Service]
Type=simple
# ExecStartPre commands are executed in order given
ExecStartPre=-/usr/bin/echo "ExecStartPre first"
ExecStartPre=-/usr/bin/bash -c "/usr/bin/zip -D -9 -x*.zip -x*.sql -x*.gz /code/logs/%H-$(TZ=Australia/Sydney date +%Y-%%m-%d__%%H.%M.%S ).zip /code/logs/*"
#ExecStartPre=-/usr/bin/echo "ExecStartPre before sleep"
#ExecStartPre=-/usr/bin/sleep 1
ExecStartPre=-/usr/bin/echo "ExecStartPre last"
ExecStart=/code/listener
ExecStartPost=-/usr/bin/echo "ExecStartPost"
#ExecStopPost=-/usr/bin/echo "ExecStopPost before sleep"
#ExecStopPost=-/usr/bin/sleep 1
ExecStopPost=-/usr/bin/echo "ExecStopPost"
# keep alive - always restart it if it dies
Restart=always
# wait 5 seconds between restarts
RestartSec=5
# wait 5s for start and stop
TimeoutSec=10
[Install]
WantedBy=multi-user.target
Uyku komutlarını kullanıp kullanmama, RestartSec komutlarını kullanmama veya her ikisini de bırakmama bu gibi bir / var / log / messages dizisi alıyorum (sudo grep listener -b5 -a5 / var / log / messages):
270521-Sep 1 06:24:16 dfxmyalarmsqlb1 systemd: Reloading.
270715-Sep 1 06:24:16 dfxmyalarmsqlb1 systemd: Stopping Listener - main Digiflex server program...
270808:Sep 1 06:24:16 dfxmyalarmsqlb1 listener: stopping...!
270809:Sep 1 06:24:16 dfxmyalarmsqlb1 listener: Listener shut down complete build date 20150901 commit 1,474 ***
270924:Sep 1 06:24:16 dfxmyalarmsqlb1 listener: Listener starting: build date 20150901 commit 1,474 ***
271018-Sep 1 06:24:16 dfxmyalarmsqlb1 echo: ExecStopPost before sleep
271082-Sep 1 06:24:17 dfxmyalarmsqlb1 echo: ExecStopPost
271133-Sep 1 06:24:17 dfxmyalarmsqlb1 systemd: Starting Listener - main Digiflex server program...
271226-Sep 1 06:24:17 dfxmyalarmsqlb1 echo: ExecStartPre first
271283:Sep 1 06:24:17 dfxmyalarmsqlb1 bash: adding: code/logs/listener-app-forwarded-errors.log (stored 0%)
271385:Sep 1 06:24:17 dfxmyalarmsqlb1 bash: adding: code/logs/listener-errors.log (deflated 93%)
271476:Sep 1 06:24:17 dfxmyalarmsqlb1 bash: adding: code/logs/listener.log (deflated 94%)
271560:Sep 1 06:24:17 dfxmyalarmsqlb1 bash: adding: code/logs/listener-packets.log (deflated 97%)
271652:Sep 1 06:24:17 dfxmyalarmsqlb1 bash: adding: code/logs/listener-quickfail.log (stored 0%)
271743:Sep 1 06:24:17 dfxmyalarmsqlb1 bash: adding: code/logs/listener-skinny-polls.log (stored 0%)
271837:Sep 1 06:24:17 dfxmyalarmsqlb1 bash: adding: code/logs/listener-zero-sesson.log (stored 0%)
271930-Sep 1 06:24:17 dfxmyalarmsqlb1 echo: ExecStartPre before sleep
271994-Sep 1 06:24:18 dfxmyalarmsqlb1 echo: ExecStartPre last
272050-Sep 1 06:24:18 dfxmyalarmsqlb1 echo: ExecStartPost
272102-Sep 1 06:24:18 dfxmyalarmsqlb1 systemd: Started Listener - main Digiflex server program.
272192:Sep 1 06:24:18 dfxmyalarmsqlb1 listener: logfile config from /code/listener.zlog.conf ***
*** ile işaretlenmiş satırlar programımdan çıkıyor. Günlük zaman damgalarına dikkat edin) ve programım kapandığını ve hemen başlatıldığını söylüyor; ExecStopPost ve ExecStartPre komutları yalnızca başlangıçtan sonra oluyor.
Umarım burada özlediğim bir şey vardır.