Pythonで実装したプログラムを、Raspberry Pi(Raspbian)でデーモン起動させるときのメモ。
python-daemonのインストール
python-daemonは、Pythonプログラムをdaemon化できるパッケージである。
sudo apt-get install python-daemon
デーモンプログラム
Pythonプログラムはこんな感じ。
#!/usr/bin/env python # -*- coding: utf-8 -*- import serial import time from daemon import DaemonContext from daemon.pidlockfile import PIDLockFile if __name__ == '__main__': # 以下がデーモンプロセスとして実行される # pidfileが/tmpにないと、動作しないらしい with DaemonContext(pidfile=PIDLockFile('/tmp/serial-arduino.pid')): main()
起動スクリプト
サービス起動させるための起動デーモンは以下の通り。
$ sudo vi /etc/init.d/hoged #!/bin/sh ### BEGIN INIT INFO # Provides: hoged # Required-Start: $local_fs $remote_fs $syslog # Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Start hoged daemon ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin # Source function library. . /lib/lsb/init-functions # Path to the script DAEMON=/usr/local/sbin/python-hoge.py PROG=serial-arduino PIDFILE=/tmp/hoged.pid LOCKFILE=/tmp/hoged.pid.lock test -f $DAEMON || exit 0 lock_hoged() { if [ -x /usr/bin/lockfile-create ]; then lockfile-create $LOCKFILE lockfile-touch $LOCKFILE & LOCKTOUCHPID="$!" fi } unlock_hoged() { if [ -x /usr/bin/lockfile-create ] ; then kill $LOCKTOUCHPID lockfile-remove $LOCKFILE fi } case "$1" in start) log_daemon_msg "Starting $PROG server" "$PROG" lock_hoged start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON -- -p $PIDFILE status=$? unlock_hoged log_end_msg $status ;; stop) log_daemon_msg "Stopping $PROG server" "$PROG" start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE log_end_msg $? rm -f $PIDFILE ;; status) status_of_proc -p $PIDFILE $DAEMON $PROG ;; restart) stop start ;; *) echo "Usage: $PROG {start|stop|status|restart}" exit 1 ;; esac
最後に変更を反映。
sudo update-rc.d hoged defaults