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