(2 jawaban)
Tutup 2 tahun yang lalu.
Saya telah menginstal ddns dinamis no-ip dengan mengikuti panduan ini:
https://www.noip.com/support/knowledgebase/installing-the-linux-dynamic-update-client/
Saya menjalankan layanan dengan
sudo /usr/local/bin/noip2
Namun saya ingin layanan dimulai saat boot, saya mencoba menambahkan skrip berikut ke /etc/init.d/noip2.sh
#######################################################
#! /bin/sh
# . /etc/rc.d/init.d/functions # uncomment/modify for your killproc
case "$1" in
start)
echo "Starting noip2."
/usr/local/bin/noip2
;;
stop)
echo -n "Shutting down noip2."
killproc -TERM /usr/local/bin/noip2
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
#######################################################
Diikuti oleh:
sudo chmod +x /etc/init.d/noip2.sh
sudo update-rc.d noip2.sh defaults
Sekarang saya seharusnya dapat memulai layanan dengan
sudo service noip2 start
Tapi saya tidak. Ketika saya menjalankan journalctl -xe
Saya mendapatkan yang berikut:
-- Unit noip2.service has begun starting up.
Nov 03 12:36:11 media systemd[3111]: noip2.service: Failed to execute command: Exec format error
Nov 03 12:36:11 media systemd[3111]: noip2.service: Failed at step EXEC spawning /etc/init.d/noip2.sh: Exec format error
-- Subject: Process /etc/init.d/noip2.sh could not be executed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- The process /etc/init.d/noip2.sh could not be executed and failed.
--
-- The error number returned by this process is 8.
Nov 03 12:36:11 media systemd[1]: noip2.service: Control process exited, code=exited status=203
Nov 03 12:36:11 media systemd[1]: noip2.service: Failed with result 'exit-code'.
Nov 03 12:36:11 media systemd[1]: Failed to start noip2.service.
-- Subject: Unit noip2.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
Info terbaru untuk pengguna PerDuck:
Saya mendapatkan kesalahan berikut saat mencoba solusi Anda…
Mencoba menambahkan
RestartSec=30
Setidaknya itu terus mencoba sekarang tetapi masih belum dimulai. Saya masih bisa memulainya dengan sudo /usr/local/bin/noip2
Kesalahan:
Nov 03 23:26:42 media systemd[1]: noip2.service: Service hold-off time over, scheduling restart.
Nov 03 23:26:42 media systemd[1]: noip2.service: Scheduled restart job, restart counter is at 5.
Nov 03 23:26:42 media systemd[1]: Stopped noip2 service.
Nov 03 23:26:42 media systemd[1]: noip2.service: Start request repeated too quickly.
Nov 03 23:26:42 media systemd[1]: noip2.service: Failed with result 'start-limit-hit'.
Nov 03 23:26:42 media systemd[1]: Failed to start noip2 service.
Jawaban yang Diterima:
Sejak Ubuntu 15.04 cara standar untuk mengontrol proses latar belakang (dan masih banyak lagi) adalah systemd
.
Saya sarankan untuk beralih dari init.d
. Anda skrip ke systemd
satuan :
Buat file /etc/systemd/system/noip2.service
dengan konten berikut (dan jatuhkan init.d
. Anda skrip):
[Unit]
Description=noip2 service
[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
Restart=always
[Install]
WantedBy=default.target
Kemudian keluarkan
sudo systemctl daemon-reload
untuk membuat systemd
mengetahui unit baru (systemd
cache file unit dan perintah ini membuat systemd
pertimbangkan kembali cache-nya).
Sekarang Anda dapat mencoba memulai dan menghentikan unit Anda dan lihat statusnya:
sudo systemctl status noip2
sudo systemctl start noip2
sudo systemctl status noip2
sudo systemctl stop noip2
sudo systemctl status noip2
Untuk memulai unit saat boot, Anda harus mengaktifkan itu:
sudo systemctl enable noip2
Untuk menonaktifkan autostart saat boot, Anda harus menonaktifkan satuan:
sudo systemctl disable noip2
Sebagian besar waktu lima perintah cukup untuk mengontrol perilaku unit:
systemctl start $unit # starts a unit NOW
systemctl stop $unit # stops a unit NOW
systemctl status $unit # shows status
systemctl enable $unit # starts a unit at boot time (but not NOW)
systemctl disable $unit # stops autostart (but doesn't stop the unit NOW)
Anda juga dapat mengaktifkan autostart dan memulai unit dengan segera atau menonaktifkan autostart dan menghentikannya sekaligus:
systemctl enable --now $unit # enable and start in one go
systemctl disable --now $unit # disable and stop in one go
Perbarui
Beberapa penelitian mengungkapkan noip2
berjalan sebagai daemon , yaitu saat Anda memulainya, proses tersebut akan membuat proses lain yang berjalan di latar belakang (disebut forking ) dan proses latar depan segera kembali (keluar). Itu sebabnya skrip init.d dan unit systemd gagal:Mereka memulai noip2
hanya untuk melihatnya segera keluar. Oleh karena itu, systemd mencoba me-restart berulang kali tetapi tidak berhasil. (Secara default, systemd memulai ulang proses paling banyak 5 kali dalam 10 detik atau lebih sebelum menyerah dan membiarkannya dalam keadaan gagal.)
Untuk memberi tahu systemd unit bertipe forking tambahkan baris
Type=forking
ke [Service]
bagian seperti yang baru saja saya lakukan di cuplikan di atas. Ini memberitahu systemd untuk mengharapkan proses utama untuk segera kembali tetapi sebagai gantinya perhatikan proses yang dihasilkan (bercabang) oleh noip2
.