Saya telah membuat file Unit ini di /lib/systemd/system/menu-core-prices-update.service
:
[Unit]
Description = core-price-update daemon
After network.target = auditd.service
[Service]
Type = forking
ExecStart = /usr/local/bin/start-menu-core-prices-update.sh
ExecStop = /usr/local/bin/stop-menu-core-prices-update.sh
ExecReload = /usr/local/bin/reload-stop-menu-core-prices-update.sh
[Install]
WantedBy = multi-user.target
Dari baris perintah saya dapat menjalankan:
$ /usr/local/bin/start-menu-core-prices-update.sh
dan program dimulai dengan benar. Tetapi jika saya memulai daemon:
$ sudo systemctl start menu-core-prices-update.service
Saya mendapatkan kesalahan ini:
Jul 24 21:10:20 localhost systemd[13655]: menu-core-prices-update.service: Failed at step EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh: Exec format error
-- Subject: Process /usr/local/bin/start-menu-core-prices-update.sh could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /usr/local/bin/start-menu-core-prices-update.sh could not be executed and failed.
--
-- The error number returned by this process is 8.
Jul 24 21:10:20 localhost systemd[1]: menu-core-prices-update.service: Control process exited, code=exited status=203
Jul 24 21:10:20 localhost systemd[1]: Failed to start core-price-update daemon.
-- Subject: Unit menu-core-prices-update.service has failed
Izin:
-rwxr-xr-x 1 root root 87 Jul 24 20:27 /usr/local/bin/start-menu-core-prices-update.sh
Jawaban yang Diterima:
Masalah #1
Saya menemukan utas ini berjudul:[Terpecahkan] Tambahkan skrip khusus ke systemd yang memiliki kesalahan yang sama seperti yang ditunjukkan output Anda di atas, terutama bit ini:
Gagal pada langkah EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh:Exec format error
Kesalahan ini biasanya berarti bahwa skrip Anda memiliki satu atau beberapa masalah berikut:
- Tidak dapat dijalankan
- Tidak ada shebang (
#!/bin/bash
)
Untuk mengatasinya, pastikan skrip Anda dapat dieksekusi:
$ chmod a+x /usr/local/bin/start-menu-core-prices-update.sh
Dan pastikan untuk menambahkan shebang, #!/bin/bash
ke atas.
Masalah #2
Sepertinya Anda salah ketik pada baris ini:
After network.target = auditd.service
Ini mungkin seharusnya ini:
After=network.target auditd.service
Masalah #3
Tidak jelas bagi saya mengapa Anda menggunakan Type = forking
. Saat Anda menggunakan jenis ini, Anda ExecStart=
diperlukan untuk menggunakan metode yang memanggil fork()
. Anda juga seharusnya menggunakan PIDFile=
pilihan.
Saya berharap aplikasi Java Anda akan bekerja dengan baik dengan simple
atau oneshot
. Lihat T&J U&L ini berjudul:Forking dalam skrip systemd untuk mengetahui lebih lanjut tentang ini.