Debian: Bagaimana menjalankan skrip pada startup tanpa harus menulis 30 baris skrip shell?

20

Saya memiliki server Debian dan saya hanya perlu menjalankan skrip saat startup.

Saya membacanya: https://www.debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

Saya dapatkan sekarang: insserv: warning: tag LSB yang hilang dan override

jadi sepertinya saya harus menambahkan sekarang:

### 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

Ini terlihat gila: seperti 30 baris skrip hanya untuk menjalankan program saat startup.

Apakah ada alat yang memungkinkan untuk melakukannya dengan cara sederhana?

Salam

yarek
sumber
Naskah macam apa itu? Sudahkah Anda mencoba menjalankannya dari /etc/rc.local? Anda dapat meletakkan path ke skrip di file rc.local dan itu akan dieksekusi saat boot.
Diamant
skrip sederhana yang memulai proses simpul, memulai php dll ...
yarek
Saya menghitung 9 baris, bukan 30. Dan itu komentar, bukan skrip shell (dan bukan skrip SSH).
Wurtel
Itu adalah header LSB (lihat wiki.debian.org/LSBInitScripts ) dan pelat boiler skrip init LSB berada di utara 70 baris (lihat hal-hal seperti github.com/fhd/init-script-template/blob/master/template ). Jika Anda ingin membuat satu perintah dijalankan dengan tangan untuk ditangani saat Anda boot oleh komputer melalui beberapa file di / etc, ini sepertinya upacara yang cukup rumit!
kristopolous

Jawaban:

29

Jika skrip Anda "hanya skrip", dan tidak memulai daemon, pertimbangkan untuk menggunakan /etc/rc.local(dieksekusi sebagai root) atau crontab(dieksekusi sebagai pengguna pilihan Anda).

Dua contoh:

  • /etc/rc.local

    #!/bin/sh -e
    #(Multiple lines of comments removed.)
    /usr/local/bin/your-script.sh
    exit 0
    
  • crontab(diedit via, misalnya, crontab -e)

    #(Multiple lines of comments removed.)
    @reboot /usr/local/bin/your-script.sh
    

Sunting 1: Cukup baca komentar Anda: Jika skrip Anda memulai daemon, yang harus dijalankan setiap saat, saya menyarankan agar tidak menggunakan rc.localatau crontab, dan alih-alih menulis init.dskrip yang tepat (atau banyak ). Dengan cara ini Anda / sistem Anda dapat me-restart / me-reload / start / stop dengan bersih dll. Daemon.

Sunting 2: Anda menyebutnya gila, tetapi LSB tagsmemberikan beberapa nilai: "Dengan mendokumentasikan dependensi run-time untuk skrip init.d, menjadi mungkin untuk memverifikasi urutan boot saat ini, memesan boot menggunakan dependensi ini, dan menjalankan skrip boot di sejajar untuk mempercepat proses boot. " Untuk detail lebih lanjut, kunjungi wiki Debian .

(Ngomong-ngomong: Ini peringatan, jadi sebenarnya, terserah Anda, bagaimana dan apa yang harus dilakukan dengan ini.)

gf_
sumber
Saya suka versi crontab .. tapi saya rasa @reboot tidak berfungsi di debian!
yarek
@yarek: Berhasil, menggunakan ini sendiri (untuk skrip, yang hanya skrip).
gf_
2
berfungsi, tetapi saya pikir ini hanya untuk pengguna root, jadi Anda harus melakukannya@reboot root /usr/local/bin/your-script.sh
Froggiz
tapi saya berbicara tentang debian!
Froggiz
Saya masih sangat bingung memang: Apakah cron memungkinkan untuk menjalankan skrip ketika server restart, tidak membuka sesi sebagai root.
yarek
0

pengawas juga merupakan pilihan. Anda akan menulis lagi beberapa baris untuk memulai node.js dan hal-hal PHP Anda, tetapi mereka akan lebih sedikit.

adamo
sumber
0

Anda dapat menggunakan monitd untuk ini, cukup tulis beberapa definisi monit dan itu akan memulai daemon untuk Anda. Tetapi mengapa Anda tidak menggunakan cara yang benar dengan skrip LSB? Tidak begitu sulit untuk menulisnya (Anda hanya menulis sekali) dan ini adalah cara paling bersih dan paling berharga untuk mencapainya.

Ondra Sniper Flidr
sumber