Jawaban ini berlaku untuk versi Ubuntu dengan Upstart (<= 14.10). Gunakan pendekatan lain untuk versi dengan Systemd (> = 15.04).
Tampaknya Anda sedang mencari fungsionalitas yang sudah disediakan di Ubuntu dengan Upstart . The respawn
bait di konfigurasi akan melakukan apa yang Anda butuhkan. Saya akan merekomendasikan menentang penggunaan cara yang kurang standar dalam menangani hal ini.
Tanpa rincian lebih lanjut tentang proses yang Anda coba kelola dengannya, sulit untuk mengatakan seperti apa konfigurasi itu. Itu tergantung pada apakah itu bercabang dan menempatkan dirinya di latar belakang misalnya. Dokumentasi pemula pada respawn
bait harus memberi Anda informasi lebih lanjut.
Sayangnya, belum dimungkinkan untuk menjalankan Pekerjaan Pengguna dengan benar: tidak dapat memulai untuk menjalankan pekerjaan pengguna
Contoh
Mari kita asumsikan kita ingin tetap menjalankan aplikasi Kalkulator, bahkan ketika sedang dimatikan dengan api (sinyal 9).
Buat file konfigurasi di /etc/init/calculator.conf
(berdasarkan artikel ini ):
#!upstart
description "Calculator"
# Start job via the daemon control script. Replace "gert" with your username.
exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
Mulai dengan berlari
sudo start calculator
Ini terbuka pada tampilan Anda saat ini ( :0
) dan nikmati kehebatannya dengan melihatnya memulai kembali setelah menutupnya.
Identifikasi ID proses, misalnya dengan melakukan ps aux | grep calculator
:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
Matikan dengan api.
sudo kill -9 13695
Tonton kembali:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
Perhatikan bahwa ini akan lebih elegan dengan paket untuk paket Ubuntu 13.04 dengan dukungan Pekerjaan Pengguna yang tepat.
servicename.conf
harus sesuai dengan perintah untuk memulaistart servicename
. Saya curiga Anda telah memilih nama yang berbeda.Alat yang sangat sederhana yang dapat mencapai efek yang sama tanpa memerlukan konfigurasi adalah
immortal
: https://immortal.run/Cukup jalankan perintah seperti ini:
immortal <cmd>
Ini akan berjalan di latar belakang dan memulai kembali secara otomatis jika keluar.
immortalctl
: Lihat status menjalankan pekerjaan. Adaname
kolom yang akan dicetak di sini, Anda dapat menggunakan ini untuk merujuk ke pekerjaan dengan perintah kontrol lainnya.immortalctl stop <name>
: Berhenti memantau pekerjaan dengan nama yang diberikan (itu tidak akan secara otomatis dimulai kembali, tetapi proses saat ini akan terus dijalankan)immortalctl -k <name>
: Mengirim SIGKILL ke proses saat ini.immortalctl exit <name>
: Berhenti memantau pekerjaan dengan nama yang diberikan dan menghapusnya dari daftar pekerjaan.sumber
stdout
danstderr
di latar depan?immortalctl -l out.log <cmd> && tail -f out.log
untuk mencapai efek yang sama.Jika Anda tidak memerlukan fungsionalitas proses daemon / layanan / latar belakang dan hanya ingin melakukannya di konsol kemudian buat file bernama
autorestart.sh
:Maka
./autorestart.sh
secara otomatis akan restartsome_command
jika keluar atau crash. CTRL-C memutus loop dan keluar dari program dengan bersih.Diuji pada Ubuntu 18.04.
sumber
Ada cara tanpa "pemula". Kata kuncinya adalah "inittab" :-). Meskipun itu file yang biasanya tidak diubah dari default, itu dapat digunakan untuk mencapai respawning yang diinginkan pada mesin SYSV.
sumber
ps-watcher adalah alat yang mengawasi proses mana yang sedang berjalan dan mengeksekusi suatu tindakan pada keadaan tertentu. Mari kita instal:
Lihat bagian bawah Menjalankan HHVM dengan fallback ke PHP-FPM untuk detail - ini telah bekerja dengan baik untuk saya.
sumber
Proses startup dan respawning dikelola oleh "systemd" sejak Ubuntu 15.04, pengantar yang baik dapat ditemukan di sini
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal
contoh yang membantu Anda memulai tersedia di
https://www.devdungeon.com/content/creating-systemd-service-files
Pendekatan ini menggantikan yang lama berdasarkan / etc / inittab dan pemula.
sumber