前回のシステムでは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あたりを使用して、もっとそれっぽくしてみたいと思います。”””