Saya telah membuat layanan systemd:
[Unit]
Description=My service
[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=mine.service
Saya memasukkannya ke folder / etc / systemd / system dan menamainya mine.service.
Jika saya menjalankannya sudo service mine start
memberi saya:
Gagal memulai mine.service.Unit mine.service tidak ditemukan
--- PEMBARUAN -----
Saya menjalankan dulu sudo systemctl daemon-reload
dan sekarang tidak memberi saya pesan apa pun tetapi layanan masih belum dimulai.
systemctl daemon-reload
setelah membuat file unit Anda?Jawaban:
$HOME
menunjuk ke direktori home pengguna yang menjalankan skrip. Layanan Systemd dimulai dengan root sehingga kemungkinan akan berusaha/root/theFolder/run.sh
. Gunakan jalur absolut dalam file layanan.Anda juga memiliki
forking
opsi yang ditetapkan. Ini diperlukan untuk program yang latar belakangnya sendiri, apakah skrip Anda melakukan ini? Kebanyakan tidak dan jika milik Anda tidak, Anda harus menghapus opsi ini atau systemd akan menunggu skrip Anda selesai untuk mengklaimnya sebagai dimulai.Juga file layanan sistem yang mengarah ke skrip di direktori home Anda tidak disarankan dan mungkin masalah keamanan. Karena dijalankan sebagai root, siapa pun yang dapat memodifikasinya berpotensi mendapatkan akses root ke komputer Anda. Jauh lebih baik untuk menyalin skrip ke
/usr/local/bin
dan memastikan itu dimiliki dan hanya dapat ditulisi oleh root untuk menghentikan ini. Ini juga merupakan ide yang baik untuk menjalankan skrip sebagai pengguna yang tidak memiliki hak menggunakanUser=
danGroup=
opsi dalam file layanan.Jika Anda ingin menjalankannya sebagai pengguna Anda lebih baik memasukkan file layanan
~/.config/systemd/user/
dan memulai / mengaktifkannya dengansystemctl --user enable yourservice && systemctl --user start yourservice
(catatan, jalankan karena pengguna Anda tidak root). Lihat ini untuk info lebih lanjut tentang file layanan pengguna.sumber
HOME=$HOME
file lingkungan pertama. Tetapi layanan tidak dapat memulai, tidak ada kesalahan.