今、ラズパイでNTP時計を自作しようと奮闘中なんですが、プログラムの自作に目処が付いたので、その自作プログラムをデーモン化して自動起動するようにしてみました。
この情報は、無知の私がネットで知り得た事なので、全てが誤りかも知れません。また、OSの再起動コマンドsudo reboot時、自作プログラムの終了が遅い時があります。でもsudo shutdown -r nowには直ぐに反応しますが。
これらを理解した上で参考にして下さい。
自作プログラム(test11)やユニットファイルの置き場所は
自作プログラム
/usr/local/sbin/test11
ユニットファイル
/etc/systemd/system/test11.service
自作プログラムのmain()にデーモン関数を使用。
これにはヘッダファイル unistd.h が必要です。
#include <unistd.h>
int main(void)
{
if(daemon(0, 0) == 0) { // デーモン関数
mainLoop(); // ここに自作プログラム(無限ループ)を書く
} else {
cout << "error" << endl; // この1行は自信無し
}
return 0;
}
ユニットファイル作成。ntp.serviceの後に起動、GUIログイン環境。
$ sudo vi /etc/systemd/system/test11.service
[Unit] Description = test11 daemon After = ntp.service ConditionPathExists = /usr/local/sbin [Service] ExecStart = /usr/local/sbin/test11 Restart = no Type = forking [Install] WantedBy = graphical.target
パーミッションを644に変更。
$ sudo chmod 644 /etc/systemd/system/test11.service
systemctlコマンドでデーモンとする。
$ sudo systemctl daemon-reload $ sudo systemctl start test11.service $ sudo systemctl enable test11.service