自作スクリプトを電源ON時に自動的に起動させる一般的な手順

Raspberry PIやUbuntu16.04等のsystemdを用いたシステムで、電源ON時に自作スクリプトをデーモンとして起動させる手順を示します。
/user/pi/yasuraka_server/yasuraka_server というスクリプトを電源ON時に起動させたいという想定です。

スクリプトを作成

下記のテンプレートをカスタマイズし、/etc/init.d/【スクリプトの名称】として保存します。

  • 変数 daemon にスクリプトの名称
  • 変数 args にスクリプトへの引数
  • 変数 appdir にスクリプトのパス
#!/bin/sh
### BEGIN INIT INFO
# Provides: yasuraka_server
# Required-Start: $network $local_fs $remote_fs
# Required-Stop:  $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 1
# Short-Description: Start yasuraka_server daemon
### END INIT INFO
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

daemon="yasuraka_server"
args=""
 
appdir=/home/pi/yasuraka_server/
pidfile=/var/run/${daemon}.pid
logfile=/var/log/${daemon}.log

. /lib/lsb/init-functions
 
RETVAL=0
 
# System configuration
unset TMPDIR
 
start() {
    echo -n "Starting ${daemon} services: "
    echo -n "waiting "    # wait for boot of mysql, only needed raspberry pi
    sleep 1m
    echo -n "restart "
    # cheking already run?
    if start-stop-daemon --stop --quiet --signal 0 --pidfile $pidfile
    then
      pid=`cat ${pidfile}`
      log_warning_msg "daemon is already running? (pid=${pid})"
      exit 1
    fi
    start-stop-daemon --start --background --exec "/bin/bash" --pidfile "$pidfile" --make-pidfile -- -c "exec $appdir$daemon.php $args >> $logfile 2>&1"
    status=$?
    log_end_msg $status
}
stop() {
    log_daemon_msg -n $"Stopping ${daemon} service: "
    # cheking already run?
    if start-stop-daemon --stop --signal 0 --pidfile $pidfile ; then
        start-stop-daemon --stop --pidfile $pidfile
        status=$?
        rm -f $pidfile
        log_end_msg $status
    else
        log_warning_msg "daemon not running? (check ${pidfile})."
    fi
}
 
case "$1" in
     start)
          start
          ;;
     stop)
          stop
          ;;
     restart)
          stop
          start
          ;;
     *)
     echo $"Usage: ${daemon} {start|stop|restart}: "
     RETVAL=2
esac
 
exit $RETVAL

ファイルモードを設定

実行を許可します。

$ sudo chmod 755 /etc/init.d/【スクリプトの名称】

起動されるように設定

$ sudo systemctl enable 【スクリプトの名称】

再起動

$ sudo reboot

再起動時に、/run/systemd/generator.late/【スクリプトの名称】.service が作成されます。

確認

下記のコマンドにより表示されるログを確認する。

$ tail /var/log/【スクリプトの名称】.log