Raspberry PiでIoTなシステム開発:自分で書いたデーモンをinit.dで起動する

前回のシステムではrc.localにスクリプトを書いて起動していたのですが、これだと終了時に自動処理をさせることができきないのと、ランレベルに応じた処理ができません。それにinsservとかを使って登録できる方がなんとなく「システム管理」をしている感じがします。とりあえず最小限のスクリプトを先達の雛形に添って作成。ktdというのはこれから作成する予定のデーモンの名前です。実態は何もしない無限ループです。

#! /bin/sh### BEGIN INIT INFO# Provides:          ktd - kawacchi timer daemon# Required-Start:    $all# Required-Stop:# Default-Start:     2 3 4 5# Default-Stop:      0 1 6# Short-Description: daemon for detect gpio rise and report via unix domain socket### END INIT INFOcase ""$1"" in    start)        echo ""Starting ktd""        /home/pi/kt/ktd/ktd &        ;;    stop)        echo ""Stopping ktd""        killall ktd        ;;    *)        echo ""Usage: /etc/init.d/ktd start|stop""        exit 1        ;;esacexit 0

直接実行してみるとroot権限で実行されました。

pi@raspberrypi:~/kt/ktd $ sudo /etc/init.d/ktd startStarting ktdpi@raspberrypi:~/kt/ktd $ ps auUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot       634  0.0  0.1   4052  1740 tty1     Ss+  06:58   0:00 /sbin/agetty --noclear tty1 linuxroot       635  0.0  0.2   3872  1928 ?        Ss+  06:58   0:00 /sbin/agetty --keep-baud 115200 38400 9600 pi         703  0.0  0.4   6244  4472 pts/0    Ss   07:02   0:01 -bashroot      1214  0.3  0.1  10388  1204 pts/0    Sl   07:35   0:00 /home/pi/kt/ktd/ktdpi        1223  0.0  0.2   4740  2064 pts/0    R+   07:35   0:00 ps au

最初はrc*.dの何処にもスクリプトが入っていませんが、insservを実行するとリンクが登録されました。Required-startが反映されたようで実行順位が04になっています。

pi@raspberrypi:~/kt/ktd $ ls -l /etc/rc*.d/*ktdls: cannot access /etc/rc*.d/*ktd: No such file or directorypi@raspberrypi:~/kt/ktd $ sudo insserv -d ktdpi@raspberrypi:~/kt/ktd $ ls -l /etc/rc*.d/*ktdlrwxrwxrwx 1 root root 13 Feb 12 08:18 /etc/rc0.d/K01ktd -> ../init.d/ktdlrwxrwxrwx 1 root root 13 Feb 12 08:18 /etc/rc1.d/K01ktd -> ../init.d/ktdlrwxrwxrwx 1 root root 13 Feb 12 08:18 /etc/rc2.d/S04ktd -> ../init.d/ktdlrwxrwxrwx 1 root root 13 Feb 12 08:18 /etc/rc3.d/S04ktd -> ../init.d/ktdlrwxrwxrwx 1 root root 13 Feb 12 08:18 /etc/rc4.d/S04ktd -> ../init.d/ktdlrwxrwxrwx 1 root root 13 Feb 12 08:18 /etc/rc5.d/S04ktd -> ../init.d/ktdlrwxrwxrwx 1 root root 13 Feb 12 08:18 /etc/rc6.d/K01ktd -> ../init.d/ktdpi@raspberrypi:~/kt/ktd $ sudo insserv -r ktdpi@raspberrypi:~/kt/ktd $ ls -l /etc/rc*.d/*ktdls: cannot access /etc/rc*.d/*ktd: No such file or directory

削除も簡単にできるようです。もう1回登録をして再起動するとこんな感じでした。ちゃんと起動していますね。

pi@raspberrypi:~ $ ps axu | grep ktdroot       350  0.0  0.1  10388  1316 ?        Sl   08:23   0:00 /home/pi/kt/ktd/ktdpi         725  0.0  0.2   4276  1944 pts/0    S+   08:25   0:00 grep --color=auto ktd

次はstart-stop-daemonあたりを使用して、もっとそれっぽくしてみたいと思います。”””

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です