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/system
tetapi 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 systemd
akan menjalankan skrip dalam lingkungan terbatas, mirip dengan bagaimana crontab
skrip dijalankan, oleh karena itu jangan membuat asumsi tentang variabel sistem yang sudah ada sebelumnya seperti $ PATH. Gunakan Environment
kunci jika skrip Anda membutuhkan variabel tertentu untuk didefinisikan. Menambahkan set -x
di bagian atas skrip bash Anda dan kemudian menjalankannya systemctl status my_service
dapat 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
.