{{tag>debian remove systemd sysv system init}}

====== Запуск PHP скрипта с использованием nohup ======

===== Debian / Ubuntu =====

==== sysv-init ====

nano /etc/init.d/price_parser \\
chmod +x /etc/init.d/price_parser
<code bash>
#!/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} ]; then
       RETVAL=1
       echo -n "Already running !"
       echo
    else
       cd ${PPATH} && nohup ${SCRIPT} >/dev/null 2>&1 &
       RETVAL=$?
       PID=$!
       [ $RETVAL -eq 0 ] && touch ${LOCKFILE}
       echo
       echo $PID > ${PIDFILE}
    fi
}

stop() {
    if [ -s ${PIDFILE} ]; then
        echo -n "Shutting down ${PNAME} : "
        kill -9 `cat ${PIDFILE}`
        RETVAL="$?"
        if [ $RETVAL -eq 0 ]; then
                rm -f ${LOCKFILE}
                rm -f ${PIDFILE}
        fi
    else
   RETVAL=1
   echo -n "Already stoped !"
   echo	
    fi
    return "$RETVAL"
}

restart() {
    echo -n "Restarting ${PNAME} : "
    stop
    sleep 2
    start
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    status)
        status ${PNAME}
    ;;
    restart)
        restart
    ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
    ;; esac

exit 0
</code>

==== Upstart ====

Умерла
==== systemd ====

  * [[https://community.vscale.io/hc/ru/community/posts/211805669-%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-systemd-%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B-%D1%8E%D0%BD%D0%B8%D1%82%D1%8B|Введение в systemd. Сервисы, юниты]]
  * https://habrahabr.ru/post/275645/
  * http://pikabu.ru/story/systemd_dlya_samyikh_malenkikh_chast_i_znakomstvo_4285483
  * [[https://wiki.archlinux.org/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)]]
  * [[debian:remove-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
<code bash>
[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>&1
ExecStop=/usr/bin/php /home/some/path/to/app/yii some/cotroller/action stop >/dev/null 2>&1
#Restart=always
#RestartSec=5
RemainAfterExit=yes
User=user
Group=www-data

[Install]
WantedBy=multi-user.target
Alias=yii-some-listen.service
</code>

Or usep PID file

nano /etc/systemd/system/yii-some-listen.service
<code bash>
[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>&1
ExecStop=pkill -9 -F /var/run/yii-some-listen.pid
#Restart=always
#RestartSec=5
RemainAfterExit=yes
User=user
Group=www-data

[Install]
WantedBy=multi-user.target
Alias=yii-some-listen.service
</code>
==== Mudar ====

==== Epoch ====


===== CentOS / Fedora =====

<code bash>
</code>