今、ラズパイで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

コメントを残す

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

Post Navigation