Yanıtlar:
Önerilen çözüm, servis birimini normal bir servis olarak çalıştırmaktır - [Install]bölüme bir göz atın . Bu yüzden her şey ters olarak düşünülmeli, bağımlılıklar da. Çünkü kapatma emri, ters başlangıç emridir. Bu yüzden senaryo yerleştirilmeli ExecStop=.
Aşağıdaki çözüm benim için çalışıyor:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=trueBir ExecStartişlem yapmadığınızda gereklidir .
Dosyayı oluşturduktan sonra systemctl daemon-reloadve olduğundan emin olun systemctl enable yourservice --now.
Daha yeni IRC sisteminden aldım, krediler mezcalero'ya gidiyor.
RemainAfterExit=true hiçbir varken gereklidir ExecStartçünkü systemdçalıştırmayı denemez ExecStopo hizmeti çalışır durumda olduğunu düşünürse. RemainAfterExit=trueneden systemdhiç inanmak hizmet böylelikle çalışmasına neden çalıştığını ExecStopkapatma sırasında.
Bunu görebildiğim kadarıyla ihtiyacım olanı yapıyor (ama tam olarak nedenini bilmiyorum).
[Unit]
Description=Log Traffic
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
[Service]
ExecStart=/usr/local/bin/perl /home/me/log_traffic.pl --stop
Type=oneshot
kexec.targetÖnce biti eklemek isteyebilirsiniz
WantedBy=shutdown.target reboot.target halt.targetiçin [Unit]bölüm. Before=& After=bağımlılıkları değiştirmeyin.
Herhangi bir yeniden başlatma / kapatma / durma / kexec servisine başlamadan hemen önce bir servis çalıştırmak için (yani, kök dosya sistemi salt okunur hale getirilmeden önceki son anda) bu servis konfigürasyonunu kullanın:
[Unit]
Description=Save system clock on shutdown
DefaultDependencies=no
After=final.target
[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/scripts/fake-hwclock.sh save
[Install]
WantedBy=final.target
Şunlarla etkinleştir:
systemctl enable my_service.service
Gerçek bir yeniden başlatma / kapatma / durdurma / kexec'ten hemen önce bir komut dosyasını çalıştırmak için (kök dosya sistemine yazamıyorsanız, salt okunur olarak yeniden ayarlandıysa) bu komut dosyasını yürütülebilir /usr/lib/systemd/system-shutdowndizine ekleyin .
Sistem durdurma / poweroff / reboot / kexec systemd-stop komutunu çalıştırmadan hemen önce / usr / lib / systemd / system-shutdown / dizinindeki tüm çalıştırılabilir dosyaları çalıştırır ve bunlara bir argüman iletir: "dur", "poweroff", "yeniden başlat" Seçilen eyleme bağlı olarak "veya" kexec ". Bu dizindeki tüm çalıştırılabilir dosyalar paralel olarak yürütülür ve tüm çalıştırılabilirler tamamlanmadan eylemin yürütülmesine devam edilmez.
Ayrıca bakınız:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
final.target. İdeal olarak, kullanıcının yaptıktan sonra ilk gerçekleştirilen şey olmasını isterim $ sudo reboot.
Tamamen emin değilim ama açıkça eklemiş olmama rağmen kurulum kısmına ihtiyacınız olmadığını düşünüyorum. Ayrıca test etmedim ama başlamanıza yardımcı olacağını düşünüyorum:
[Unit]
Description=Log Traffic
Requires=network.target
After=network.target
Before=shutdown.target
DefaultDependencies=no
[Service]
ExecStart=/home/me/so.pl
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
ExecStart=/bin/true.