Bagaimana cara menambahkan skrip ke startup dan shutdown di debian?

12

judulnya cukup meringkasnya.

bagaimana cara menambahkan startup.sh dan shutdown.sh dari aplikasi server saya ke urutan startup dan shutdown dari OS Debian?

Amir Arad
sumber

Jawaban:

15

Pada Debian, skrip boot servis dan aplikasi dan shutdown harus ditempatkan /etc/init.d/.

Debian memberikan contoh skrip /etc/init.d/skeletonyang dapat Anda modifikasi sesuai selera untuk aplikasi khusus Anda.

Setelah itu di tempat, hubungi:

# update-rc.d YOURAPP defaults

Agar Debian menambahkan /etc/rc?.d/symlink untuk Anda.

Jika Anda lebih suka menu atau antarmuka grafis, lihat paket sysv-rc-confatau ksysv.

MikeyB
sumber
4

Anda dapat memanggil skrip Anda dari /etc/rc.local , sebelum baris yang mengatakan keluar 0

Sedangkan untuk mematikan aplikasi Anda, saya sarankan meletakkan skrip di /etc/rc0.d . Anda perlu memberi nama dengan huruf besar K , dan kemudian angka 2 digit yang menentukan urutan skrip ini dijalankan, dan kemudian sebuah nama. Ini akan dipanggil dengan parameter "berhenti", tetapi Anda dapat mengabaikan ini untuk skrip berhenti sederhana.

Brent
sumber
Mengapa Anda mencari-cari dengan rc.local ketika Anda harus bermain-main dengan /etc/rcX.d?
womble
rc.local adalah tempat yang tepat untuk hal-hal startup sederhana - tidak perlu berurusan dengan parameter start / stop, dll. Tapi itu tidak memiliki kemampuan untuk mematikan proses. Hal-hal rc0.d adalah sedikit hack.
Brent
3

Untuk startup lihat ini .

Untuk mematikan, buat tautan / salin skrip Anda ke salah satu folder /etc/rcX.d di mana X adalah runlevel yang ingin Anda jalankan. 0 adalah runlevel shutdown untuk Debian yang saya percaya.

squillman
sumber
Ini adalah info penutupan yang saya butuhkan. Terima kasih untuk ini, @squillman.
Harperville
1

Cara termudah adalah memodifikasi skrip yang ada, berfungsi di sistem saya, digunakan untuk suara :)

  • mulai, modifikasi /etc/init.d/rc.local, tambahkan sh Anda di akhir file, sebelum: (itu akan mengeksekusi tepat sebelum masuk "layar")
  • shutdown, modifikasi /etc/init.d/halt, tambahkan sh Anda di awal file, tepat setelah komentar awal (itu akan dieksekusi sebelum perintah shutdown aktual, yang dipanggil oleh file skrip ini
  • reboot, sama seperti shutdown, tetapi di /etc/init.d/reboot
chickensk
sumber
1

Sejak Debian Jessie, initprogram lama telah diganti oleh systemd!

Lihat sendiri. Jalankan: ls -l /sbin/initdan lihat apa maksudnya. Hari ini menunjuk ke systemd( /sbin/init -> /lib/systemd/systemd), program inisialisasi yang lebih baru dan lebih baik.


JADI PILIHAN DAN JAWABAN LAINNYA DI SINI SEKARANG !!!


* Meskipun Anda masih dapat menginstal skrip dengan cara lama dengan alat System-V, itu bukan ide yang baik secara umum.

man systemd.service mengatakan: *

Jika suatu layanan diminta dengan nama tertentu tetapi tidak ada file konfigurasi unit yang ditemukan, systemd mencari skrip init SysV dengan nama yang sama ... dan secara dinamis membuat unit layanan dari skrip itu. Ini berguna untuk kompatibilitas dengan SysV. Perhatikan bahwa kompatibilitas ini cukup komprehensif tetapi tidak 100%.


Untuk sistem Debian yang lebih baru (mis. Jessie, Stretch, Buster, dll ...)

Lebih mudah dari yang Anda pikirkan. (-:

Inilah metode baru dan pilihan untuk menginstal program boot-up atau shutdown.

Dengan systemdAnda pertama kali ingin membuat file unit . File unit sebagian besar deklarasi, bukan kode.

Kemudian Anda akan menggunakan systemctlperintah untuk mengaktifkan atau memulai unit itu.

systemdmelakukan banyak pekerjaan untuk Anda, membuatnya mudah, misalnya, untuk memiliki program penting secara otomatis memulai kembali jika crash atau terbunuh. Juga mematikan program Anda di mana dan kapan seharusnya secara default tanpa kerja ekstra di pihak Anda.


Mulai pelajari di systemdsini:

Dari Debian dan di tempat lain dan lain - lain .


Halaman manual untuk memulai dengan:

man systemd.unit - Tentang file unit secara umum
man systemd.service - Tentang file unit layanan, mis. Daemon, dan program yang dijalankan tunggal.

man systemctl - Antarmuka pengguna baris perintah
man journalctl- Lihat log apa yang telah dilakukan systemd

man systemd - Tentang program init itu sendiri


Ada juga berbagai jenis file unit lainnya, misalnya

man systemd.target - untuk grup dan target yang disinkronkan secara umum.

Setelah Anda mencerna dasar-dasar di atas, kemudian gali dengan man -k systemduntuk menemukan halaman manual terkait lainnya.



Apa pun yang Anda lakukan, di Debian jangan gunakan salah satu dari ini :

  • update-rc.d - Instal dan hapus tautan skrip init gaya Sistem-V
  • sysv-rc-conf - Konfigurasi run-level untuk SysV seperti tautan skrip init
  • runlevel - Cetak runlevel SysV sebelumnya dan saat ini
  • BUM- B oot U p M anager - editor runlevel grafis
  • systemadm- Frontend grafis untuk systemd system dan service manager
    (BTW, penulis mengatakan kepada saya melalui email bahwa itu terlalu rusak sekarang.)


SEBUAH CONTOH:

File unit ini memulai daemon NoIP.com saat saya boot-up, dan mematikannya saat saya dimatikan.

Daemon ini, dari waktu ke waktu, mengirimkan alamat IP saya saat ini untuk memperbarui saya DDNS ( D inamis DNS ( D omain N ama S erver)) data base penyedia, sehingga menjaga nama domain saya menunjuk pada komputer saya di mana pun perjalanan ke.

File unit ini terletak di sistem saya di file pengaturan ini: /etc/systemd/system/noip2.service

Inilah yang ada di file unit:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

Jalankan file unit secara manual , (misalnya untuk pengujian):

  • mulai dengan $ sudo systemctl start noip2.
  • mulai kembali dengan $ sudo systemctl restart noip2.
  • berhenti dengan $ sudo systemctl stop noip2.

Konfigurasikan sistem untuk secara otomatis menjalankan file unit saat memulai atau mematikan:

  • mulai gunakan dengan $ sudo systemctl enable noip2.
  • berakhir menggunakan dengan $ sudo systemctl disable noip2.

Melihat log

  • $ sudo journalctl -u noip2
Pandangan elips
sumber