Запуск PHP скрипта с использованием nohup
Debian / Ubuntu
sysv-init
nano /etc/init.d/price_parser
chmod +x /etc/init.d/price_parser
#!/bin/sh### BEGIN INIT INFO# Provides: price_parser# Required-Start: $remote_fs $syslog# Required-Stop: $remote_fs $syslog# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Stop/start price_parser### END INIT INFO # Author: Mirocow <mr.mirocow@gmail.com> . /lib/init/vars.sh . /lib/lsb/init-functions PNAME="price_parser"PPATH="/home/some/path/to/app"SCRIPT="/usr/bin/php ./yii some/cotroller/action"PIDFILE="/var/run/${PNAME}.pid"LOCKFILE="/var/lock/${PNAME}" RETVAL=0 start(){echo-n"Starting $PNAME : "if[-s${PIDFILE}]; thenRETVAL=1echo-n"Already running !"echoelsecd${PPATH}&&nohup${SCRIPT}>/dev/null 2>&1&RETVAL=$?PID=$![$RETVAL-eq0]&&touch${LOCKFILE}echoecho$PID>${PIDFILE}fi} stop(){if[-s${PIDFILE}]; thenecho-n"Shutting down ${PNAME} : "kill-9`cat${PIDFILE}`RETVAL="$?"if[$RETVAL-eq0]; thenrm-f${LOCKFILE}rm-f${PIDFILE}fielseRETVAL=1echo-n"Already stoped !"echofireturn"$RETVAL"} restart(){echo-n"Restarting ${PNAME} : " stop sleep2 start } case"$1"in start) start ;; stop) stop ;; status) status ${PNAME};; restart) restart ;;*)echo"Usage: $0 {start|stop|status|restart}";;esac exit0
Upstart
Умерла
systemd
Type
- Type=simple (по умолчанию): systemd предполагает, что служба будет запущена незамедлительно. Процесс при этом не должен разветвляться. Не используйте этот тип, если другие службы зависят от очередности при запуске данной службы. Исключение - активация сокета
- Type=forking: systemd предполагает, что служба запускается однократно и процесс разветвляется с завершением родительского процесса. Используйте данный тип для запуска классических демонов за исключением тех случаев, когда, как вам известно, в таком поведении процесса нет необходимости. Вам следует также определить PIDFile=, чтобы systemd могла отслеживать основной процесс
- Type=oneshot: полезен для скриптов, которые выполняют одно задание и завершаются. Вам может понадобиться также установить параметр RemainAfterExit=yes, чтобы systemd по-прежнему считала процесс активным, даже после его завершения
- Type=notify: идентичен параметру Type=simple, но с той оговоркой, что демон пошлет systemd сигнал о своей готовности. Эталонная реализация данного уведомления представлена в libsystemd-daemon.so
- Type=dbus: сервис считается находящимся в состоянии готовности, когда определенное BusName появляется в системной шине DBus
- Type=idle: systemd will delay execution of the service binary until all jobs are dispatched. Кроме того, поведение очень похоже на Type=simple.
Расположения
- /usr/lib/systemd/system - системные юниты, поставляемые обычно вместе с приложениями;
- /run/systemd/system - динамически создаваемые юниты (т.е. на лету);
- /etc/systemd/system - юниты и исправления, внесённые администратором
Запуск
- service yii-some-listen status
- service yii-some-listen stop
- service yii-some-listen start
- service yii-some-listen restart
Пример
nano /etc/systemd/system/yii-some-listen.service
[Unit]Description=Yii some-listen After=mysql.service apache2.service Requires= [Service]PIDFile=/var/run/yii-some-listen.pid WorkingDirectory=/home/some/path/to/app ExecStart=nohup/usr/bin/php /home/some/path/to/app/yii some/cotroller/action start >/dev/null 2>&1ExecStop=/usr/bin/php /home/some/path/to/app/yii some/cotroller/action stop >/dev/null 2>&1#Restart=always#RestartSec=5RemainAfterExit=yesUser=user Group=www-data [Install]WantedBy=multi-user.target Alias=yii-some-listen.service
Or usep PID file
nano /etc/systemd/system/yii-some-listen.service
[Unit]Description=Yii some-listen After=mysql.service apache2.service Requires= [Service]PIDFile=/var/run/yii-some-listen.pid WorkingDirectory=/home/some/path/to/app ExecStart=nohup/usr/bin/php /home/some/path/to/app/yii some/cotroller/action start >/dev/null 2>&1ExecStop=pkill -9-F/var/run/yii-some-listen.pid #Restart=always#RestartSec=5RemainAfterExit=yesUser=user Group=www-data [Install]WantedBy=multi-user.target Alias=yii-some-listen.service