Как запустить скрипт bash в качестве фонового процесса в системе навсегда?

#bash #shell #ubuntu #init

Вопрос:

У меня есть сценарий(sync.sh), который запускает цикл while внутри для синхронизации.

 #!/bin/bash
while :
do
     #my PHP scripts runs parallel 

     wait
     sleep 60
done
 

Я хочу навсегда запустить этот сценарий независимо в своей виртуальной машине.

Я знаю, что могу запустить этот sh-файл в фоновом режиме, используя команду nohup, disown.

Но что я хочу знать, так это? Как я могу запустить этот файл .sh при перезагрузке системы, иначе процесс будет остановлен. Как запустить файл .sh автоматически без команды терминала в виртуальной машине Ubuntu.(Как у нас при запуске системы запускаются службы Apache, MySQL)

Заранее спасибо.

Комментарии:

1. для меня… «запустите этот скрипт независимо навсегда» … требуется средство периодической проверки выполнения скрипта (например, умер ли скрипт? убил ли кто-то/что-то сценарий?); что я обычно делаю, это добавляю логику в сценарий, которая позволяет ему проверить, работает ли уже копия (сама по себе), а затем реагирую соответствующим образом, а затем планирую (в хроне), чтобы сценарий запускался на регулярной основе

Ответ №1:

Если вы используете systemD, вам следует создать службу для своего сценария sync.sh, этот файл будет:

 /lib/systemd/system/sync.service 
 

Вы можете отредактировать этот файл (с правами «root» или «sudo»), чтобы он содержал:

 [Unit]
Description=My Shell Script for Sync

[Service]
ExecStart=/usr/bin/sync.sh

[Install]
WantedBy=multi-user.target
 

Затем вы повторно загружаете свой демон systemD (чтобы он знал, что служба была добавлена). :

 sudo systemctl daemon-reload 
 

Затем вы можете включить свою службу (чтобы она запускалась при каждом запуске системы:

 sudo systemctl enable sync.service 
 

Затем вы можете запустить его вручную, чтобы он был запущен сразу же, не дожидаясь следующей перезагрузки системы :

 sudo systemctl start sync.service 
 

(конечно, вы можете изменить название своей службы, и это не обязательно называется «sync.service»

Комментарии:

1. Спасибо. Это то, что мне действительно было нужно.