GNU/Linux >> Belajar Linux >  >> Ubuntu

Tidak Dapat Mendapatkan Layanan Noip2 Untuk Memulai Saat Boot?

Pertanyaan ini sudah memiliki jawaban di sini :Bagaimana cara mengatur No-IP sebagai layanan yang tepat?

(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.)

Terkait:Memindahkan folder rumah ke instalasi baru Ubuntu?

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 .


Ubuntu
  1. Cara Mendapatkan Waktu Boot dan Waktu Aktif di Ubuntu

  2. Bagaimana Memulai Server Vnc Saat Boot?

  3. Layanan Systemctl Habis Saat Mulai?

  1. Tidak Bisa Mendapatkan Cs:pergi Untuk Berhenti Gagap?

  2. Aplikasi boot musim semi sebagai layanan + Opsi VM

  3. Boot Ubuntu 16.04 ke baris perintah / jangan mulai GUI

  1. Server Vino Vnc Tidak Dapat Memulai Saat Memulai?

  2. Boot Stuck – Bagaimana Memulai Gui Dari Baris Perintah?

  3. Tidak Dapat Memulai Aplikasi Sebagai Layanan, Tetapi Menjalankan Sebagai Proses Mandiri Cukup Berfungsi?