У меня rc.local загружает скрипт при запуске. Хотите знать, если эта служба дает сбой, есть ли способ ее автоматического перезапуска?
Вместо использования /etc/rc.local
для продолжительных сервисов создайте systemd сервис. Как пример, создать /etc/systemd/system/foo.service
, содержа:
[Unit]
Description=Foo
[Service]
Type=simple
ExecStart=/usr/bin/sleep 10
Restart=always
[Install]
WantedBy=default.target
Это создает сервис, который перезапустит команду, когда она умрет. Замена ExecStart
с Вашей командой.
После создания этого файла сделайте:
sudo systemctl daemon-reload
sudo systemctl enable foo.service
sudo systemctl start foo.service
Первая команда скажет systemctl
искать новые сервисные определения. Второе включает сервис согласно условиям запуска, которые он имеет (в этом случае, для запуска с default.target
, так, чтобы это запустилось при начальной загрузке). Последняя команда запускает сервис для этой сессии.
Для Type
:
Если установлено на
simple
(значение по умолчанию, если ни одинType=
ниBusName=
, ноExecStart=
указаны), ожидается, что процесс настроил сExecStart=
основной процесс сервиса. В этом режиме, если процесс предлагает функциональность другим процессам в системе, должны быть установлены ее каналы передачи, прежде чем демон запущен (например, снабжает сокетом настроенный systemd, через активацию сокета), в то время как systemd сразу продолжится стартовые последующие единицы.Если установлено на
forking
, ожидается, что процесс настроил сExecStart=
будет звонитьfork()
как часть его запуска. Родительский процесс, как ожидают, выйдет, когда запуск будет завершен, и все каналы передачи настраиваются. Ребенок продолжает работать как основной процесс демона. Это - поведение традиционных демонов UNIX. Если эта установка используется, рекомендуется также использоватьPIDFile=
опция, так, чтобы systemd мог определить основной процесс демона. systemd возобновит стартовые последующие единицы, как только родительский процесс выходит.
Так, если Ваши ветвления команды, то используйте Type=forking
и набор PIDFile
если Вы можете.
Для WantedBy
, выполненный systemctl list-units | grep target
найти другие доступные цели, которые можно использовать для более мелкомодульного управления.