GNU/Linux >> Belajar Linux >  >> Linux

Skrip Init.d Tidak Dijalankan Saat Boot?

Skrip saya tidak berjalan saat boot di kotak gelandangan di bawah Ubuntu.

Skrip saya terlihat seperti ini –

#!/bin/bash
# /etc/init.d/mailcatcher
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
mailcatcher --http-ip 192.168.50.10

Izin saya pada file terlihat seperti ini –

-rwxr-xr-x 1 root root 352 Apr 30 09:59 mailcatcher.sh

Saya menjalankan perintah –

sudo update-rc.d "mailcatcher.sh" defaults

Jika saya menjalankan skrip secara manual, itu berfungsi dan memulai mailcatcher. Jika saya me-reboot komputer, daemon mailcatcher tidak dimulai. Apakah saya melewatkan sesuatu?

Jawaban yang Diterima:

Dan sekarang untuk jawaban Ubuntu.

Ini adalah pertanyaan Ubuntu Linux, dan versi 15 sekarang telah dirilis. Dunia Ubuntu sekarang memiliki systemd. Tetapi bahkan sebelum versi 15, dunia Ubuntu telah dimulai. Sebenarnya tidak ada alasan untuk menulis Sistem 5 rc skrip; dan tentu saja tidak ada alasan bagus untuk memulai dari sana.

Baik pemula dan systemd melakukan semua "kontrol layanan". Yang perlu Anda lakukan hanyalah mendeskripsikan layanan .

systemd

Unit layanan systemd, untuk ditempatkan di /etc/systemd/system/mailcatcher.service , adalah

[Unit]
Description=Ruby MailCatcher
Documentation=http://mailcatcher.me/

[Service]
# Ubuntu/Debian convention:
EnvironmentFile=-/etc/default/mailcatcher
Type=simple
ExecStart=/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

[Install]
WantedBy=multi-user.target

Ini secara otomatis mendapatkan satu semua kontrol systemd, seperti:

  • systemctl enable mailcatcher.service untuk mengatur layanan agar dimulai secara otomatis saat boot.
  • systemctl preset mailcatcher.service untuk menyetel layanan agar dimulai secara otomatis saat boot, jika kebijakan lokal mengizinkannya.
  • systemctl start mailcatcher.service untuk memulai layanan secara manual.
  • systemctl status mailcatcher.service untuk melihat status layanan.

pemula

Pemula serupa, dan memodifikasi file pekerjaan pemula Fideloper LLC ke pertanyaan ini memberikan ini untuk /etc/init/mailcatcher.conf :

description "Mailcatcher"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec /usr/bin/mailcatcher --foreground --http-ip=192.168.50.10

Ini secara otomatis mendapatkan satu semua kontrol pemula, seperti:

  • initctl start mailcatcher untuk memulai layanan secara manual.
  • initctl status mailcatcher untuk melihat status layanan.

Bagian bonus daemontools

Sebagai permulaan, untuk hiburan setiap orang yang menggunakan daemontools-keluarga yang mencapai ini melalui pencarian WWW, dan untuk menunjukkan alasan lain mengapa tidak memulai di Sistem 5 rc skrip, saya menjalankan unit layanan systemd itu melalui convert-systemd-units dari toolset nosh perintah untuk menghasilkan skrip run daemontools-family berikut:

#!/bin/nosh
#Run file generated from ./mailcatcher.service
#Ruby MailCatcher
chdir /
read-conf --oknofile /etc/default/mailcatcher
/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

Sebenarnya, convert-systemd-units perintah menghasilkan keseluruhan paket layanan no direktori. Dengan direktori itu, yang menentukan informasi ketergantungan dan pemesanan, diinstal sebagai /var/sv/mailcatcher dalam sistem dengan service-manager no seseorang mendapatkan semua kontrol nosh, seperti:

  • system-control enable mailcatcher.service untuk mengatur layanan agar dimulai secara otomatis saat boot.
  • system-control start mailcatcher.service untuk memulai layanan secara manual.
  • system-control status mailcatcher.service untuk melihat status layanan.
  • system-control preset mailcatcher.service untuk mengatur layanan agar dimulai secara otomatis saat boot, jika konfigurasi lokal (preset gaya systemd atau /etc/rc.conf{,.local} ) mengizinkannya.
Terkait:Menonaktifkan Boot Hybrid Di Windows 8?

Jangan mulai dengan Sistem 5 rc file.

Lihat template ini yang digunakan oleh SaltStack untuk Sistem 5 rc skrip. Bahkan dengan penghapusan parameter SaltStack yaitu 59 baris kode skrip shell, yang sebagian besar adalah boilerplate generik yang harus Anda temukan kembali dan tulis ulang. Lagi. Dan Celada telah menunjukkan di mana Anda telah menciptakannya kembali dengan buruk.

File unit systemd memiliki panjang 11 baris. File pekerjaan pemula adalah 8 baris. run no script adalah 6. Dan mereka melakukan semua mekanisme start/stop/status untuk Anda. Jangan mulai dengan Sistem V rc , terutama tidak di Ubuntu Linux.

Bacaan lebih lanjut

  • Menyiapkan Penangkap Surat . 2014-10-21. Server untuk Hacker. Fideloper LLC.
  • James Hunt dan Clint Byrum (2014). "Keperluan". Buku Masak Pemula .
  • Jonathan de Boyne Pollard (2014). Tampilan berdampingan pada skrip yang dijalankan dan unit layanan. . Jawaban yang Sering Diberikan.

Linux
  1. Cron Job Untuk Memeriksa Apakah Script Php Berjalan, Jika Tidak Maka Jalankan?

  2. Shell Script:Kondisi "jika File Tidak Digunakan"?

  3. CentOS / RHEL 7 :Cara membuat skrip khusus untuk berjalan secara otomatis saat boot

  1. layanan:perintah tidak ditemukan

  2. Cara membuat skrip Python berjalan seperti layanan atau daemon di Linux

  3. Jalankan skrip php sebagai proses daemon

  1. Jalankan skrip dengan rc.local:skrip berfungsi, tetapi tidak saat boot

  2. Pemula:Jalankan layanan sebagai pengguna yang tidak memiliki hak istimewa dan skrip pra-mulai sebagai root

  3. Jalankan skrip bash setelah instans EC2 melakukan booting