#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. Спасибо. Это то, что мне действительно было нужно.