GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menjalankan skrip dengan systemd tepat sebelum dimatikan?

Solusi yang disarankan adalah menjalankan unit layanan sebagai layanan normal - lihat [Install] bagian. Jadi semuanya harus dipikirkan terbalik, ketergantungan juga. Karena urutan shutdown adalah urutan startup terbalik. Itu sebabnya skrip harus ditempatkan di ExecStop= .

Solusi berikut bekerja untuk saya:

[Unit]
Description=...

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>

[Install]
WantedBy=multi-user.target

RemainAfterExit=true diperlukan bila Anda tidak memiliki ExecStart tindakan.

Setelah membuat file, pastikan untuk systemctl daemon-reload dan systemctl enable yourservice --now .

Saya baru saja mendapatkannya dari systemd IRC, kredit masuk ke mezcalero.


  • Untuk menjalankan layanan tepat sebelum memulai salah satu dari layanan reboot/shutdown/halt/kexec (yaitu di saat-saat terakhir sebelum sistem file root di-remount menjadi read-only) gunakan konfigurasi layanan ini:

    [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
    

    Aktifkan dengan:

    systemctl enable my_service.service
    
  • Untuk menjalankan skrip tepat sebelum aktual reboot/shutdown/halt/kexec (ketika Anda tidak dapat menulis ke sistem file root, karena telah di-remount hanya untuk dibaca) tambahkan skrip ini yang dapat dieksekusi ke /usr/lib/systemd/system-shutdown direktori.

    Segera sebelum menjalankan sistem sebenarnya halt/poweroff/reboot/kexec systemd-shutdown akan menjalankan semua executable di /usr/lib/systemd/system-shutdown/ dan memberikan satu argumen kepada mereka:baik "berhenti", "poweroff", "reboot " atau "kexec", tergantung pada tindakan yang dipilih. Semua executable dalam direktori ini dijalankan secara paralel, dan eksekusi tindakan tidak dilanjutkan sebelum semua executable selesai.

Lihat juga:

https://www.freedesktop.org/software/systemd/man/bootup.html

https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html


Sejauh yang saya lihat, ini melakukan apa yang saya butuhkan (tetapi saya tidak tahu persis mengapa).

[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

Linux
  1. Linux – Bagaimana Cara Menjalankan Script Dengan Systemd Tepat Sebelum Shutdown?

  2. Linux – Bagaimana Mendapatkan Lebih Sedikit Ttys Dengan Systemd?

  3. Bagaimana Mengkonfigurasi Systemd Untuk Menghidupkan Script Sederhana Dengan Standardio Dalam Layanan Jaringan?

  1. Bagaimana cara menjalankan skrip sebelum yang lainnya dimatikan dengan systemd?

  2. Bagaimana cara menjalankan sebagian skrip dengan hak istimewa yang dikurangi?

  3. Systemd :Cara mengeksekusi skrip hanya saat shutdown (bukan saat reboot)

  1. Bagaimana Cara Menulis Script Startup Untuk Systemd?

  2. Bagaimana cara membuat skrip Python dijalankan sebagai layanan?

  3. Mengonfigurasi Layanan Systemd untuk dijalankan dengan akses root