Запустить bash-скрипт в качестве демона
У меня есть скрипт, который запускает мой PHP-скрипт каждый X раз:
#!/bin/bash
while true; do
/usr/bin/php -f ./my-script.php
echo "Waiting..."
sleep 3
done
Как я могу запустить его как демон?
4 ответов
чтобы запустить его как полный демон из оболочки, вам нужно использовать setsid
и перенаправить ее вывод. Вы можете перенаправить вывод в файл журнала или в /dev/null
чтобы отменить его. Предполагая, что ваш сценарий называется myscript.sh, используйте следующую команду:
setsid myscript.sh >/dev/null 2>&1 < /dev/null &
это полностью отсоединит процесс от вашей текущей оболочки (stdin, stdout и stderr). Если вы хотите сохранить выходные данные в файле журнала, замените первый /dev/null
С вашим/path/to / logfile.
вы должны перенаправьте вывод, иначе он не будет работать как истинный демон (это будет зависеть от вашей оболочки для чтения и записи вывода).
Демон-это просто программа, которая работает как фоновый процесс, а не находится под прямым контролем интерактивного пользователя...
[приведенный ниже код bash предназначен для систем Debian-Ubuntu, Linux Mint distros и так далее]
самый простой способ:
простым способом было бы редактировать ваш /etc / rc.локальный файл, а затем просто запустить скрипт оттуда (т. е. каждый раз, когда вы загружаете систему):
sudo nano /etc/rc.local
добавить следующее и сохранить:
#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &
лучший способ сделать это - создать демона через Upstart:
sudo nano /etc/init/TheNameOfYourDaemon.conf
добавить следующее:
description "My Daemon Job"
author "Your Name"
start on runlevel [2345]
pre-start script
echo "[`date`] My Daemon Starting" >> /var/log/TheNameOfYourDaemonJobLog.log
end script
exec /bin/sh TheNameOfYourScript.sh > /dev/null &
сохранить.
подтвердить, что он выглядит нормально:
init-checkconf /etc/init/TheNameOfYourDaemon.conf
Теперь перезагрузите машину:
sudo reboot
теперь, когда вы загружаете свою систему, вы можете увидеть файл журнала, в котором указано, что ваш Демон работает:
cat /var/log/TheNameOfYourDaemonJobLog.log
• теперь вы можете start/stop/restart / получить статус демона через:
перезапуск: это остановится, затем запустите службу
sudo service TheNameOfYourDaemonrestart restart
start: это запустит службу, если она не запущена
sudo service TheNameOfYourDaemonstart start
stop: это остановит службу, если она работает
sudo service TheNameOfYourDaemonstop stop
статус: это отобразит статус службы
sudo service TheNameOfYourDaemonstatus status
вы можете перейти к /etc / init.d / - вы увидите шаблон демона под названием skeleton.
вы можете дублировать его, а затем ввести свой скрипт под функцией запуска.
еще один классный трюк-запускать функции или подсхемы в фоновом режиме, не всегда выполнимые, хотя
name(){
echo "Do something"
sleep 1
}
# put a function in the background
name &
#Example taken from here
#https://bash.cyberciti.biz/guide/Putting_functions_in_background
запуск подрешетки в фоновом режиме
(echo "started"; sleep 15; echo "stopped") &