Ini adalah pekerjaan yang sangat cocok untuk Anda systemd.
Menjalankan skrip sebagai layanan systemd
Jika sistem Anda menjalankan systemd , maka Anda dapat mengonfigurasi skrip Anda untuk dijalankan sebagai layanan systemd yang menyediakan kontrol atas siklus hidup dan lingkungan eksekusi, serta prasyarat untuk memulai skrip, seperti jaringan yang sedang berjalan dan berjalan.
Folder yang disarankan untuk layanan Anda sendiri adalah /etc/systemd/system/(opsi lain adalah /lib/systemd/systemtetapi yang biasanya hanya digunakan untuk layanan OOTB).
Buat file misalnya dengan sudo vim /etc/systemd/system/autossh.service:
[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
Sekarang Anda dapat menguji layanan:
sudo systemctl start autossh
Memeriksa status layanan:
systemctl status autossh
Menghentikan layanan:
sudo systemctl stop autossh
Setelah Anda memverifikasi bahwa layanan berfungsi seperti yang diharapkan, aktifkan dengan:
sudo systemctl enable autossh
CATATAN: Untuk tujuan keamanan systemdakan menjalankan skrip dalam lingkungan terbatas, mirip dengan bagaimana crontabskrip dijalankan, oleh karena itu jangan membuat asumsi tentang variabel sistem yang sudah ada sebelumnya seperti $ PATH. Gunakan Environmentkunci jika skrip Anda membutuhkan variabel tertentu untuk didefinisikan. Menambahkan set -xdi bagian atas skrip bash Anda dan kemudian menjalankannya systemctl status my_servicedapat membantu mengidentifikasi mengapa skrip Anda gagal. Sebagai patokan, selalu gunakan jalur absolut untuk semuanya termasuk echo, atau secara eksplisit mendefinisikan $ PATH Anda dengan menambahkan Environment=MYVAR=abc.