Ця відповідь стосується версій Ubuntu з Upstart (<= 14.10). Використовуйте інший підхід для версій з Systemd (> = 15.04).
Здається, ви шукаєте функціонал, який вже надається в Ubuntu за допомогою Upstart . respawn
Строфа в конфігурації буде робити саме те , що вам потрібно. Я б рекомендував проти використання менш стандартного способу боротьби з цим.
Без додаткових подробиць про процес, яким ви намагаєтесь керувати ним, важко сказати, як повинна виглядати конфігурація. Залежить від того, чи він роздвоєний, наприклад, у фоновому режимі. Документація Upstart про respawn
строфу повинна дати вам більше інформації.
На жаль, поки що неможливо належним чином виконати завдання користувача: не можна піднятися на початок роботи із користувачем
Приклад
Припустимо, що ми хочемо продовжувати роботу програми "Калькулятор", навіть коли вона вбита вогнем (сигнал 9).
Створіть файл конфігурації в /etc/init/calculator.conf
(на основі цієї статті ):
#!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
Почніть це з запуску
sudo start calculator
Він відкривається на вашому поточному дисплеї ( :0
) і насолоджується приголомшенням, побачивши його після перезавантаження після його закриття.
Визначте ідентифікатор процесу, наприклад, виконавши ps aux | grep calculator
:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
Вбити його вогнем.
sudo kill -9 13695
Подивіться, як воно з’являється знову:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
Зауважте, що це буде більш елегантним у планах для Ubuntu 13.04 з належною підтримкою User Job.