2025年06月17日

systemd 下での自動起動

systemdの下で自動起動する場合の特徴
・Root権限で実行される。
・起動のタイミングを選択できる。

以下、設定方法
自動起動の設定ファイルをauto.service とする

以下のファイルを作成する
/etc/systemd/system/auto.service 
内容 ------------------------------
[Unit]
Description=Auto Boot Script
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
ExecStart=/home/(ユーザー名)/auto.boot
WorkingDirectory=/home/(ユーザー名)
Restart=no

[Install]
WantedBy=multi-user.target

内容ここまで --------------------------
上記例は
ネットワークが使えるようになったら起動
起動は一度だけ(指定ソフトが終了してもリブートしない)
起動するのは/home/(ユーザー名)/auto.boot
起動時の作業ホルダは/home/(ユーザー名)
という設定内容。


有効化と起動は以下コマンドを発行
sudo systemctl daemon-reload
sudo systemctl enable auto.service
sudo systemctl start auto.service

ログ確認には以下コマンドを発行
journalctl -u auto.service

auto.boot はスクリプトファイルとしておけば
そのスクリプトファイルの中のアプリをコメントアウトすれば自動起動を暫定停止できる。

auto.boot でタイムサーバー(192.168.0.200)に自動同期させる例
ここから------------------------------
#!/bin/bash

DIRS=/home/(ユーザー名)
DDD=$(date "+%Y%m%d_%H%M%S")

STDOUT="${DIRS}/${DDD}_ntp.txt"
echo "Sync Time Server" >> "$STDOUT"
ntpdate -u -b 192.168.0.200 >> "$STDOUT" 2>&1
ここまで ------------------------------

2025.07.03 追記 --------
他サービスが自PCのポート123を保持してエラー(tpdate[20963]: the NTP socket is in use, exiting)となることがある。この対策として、ntpdate のオプションに -u を追加した。

2025.07.15 追記 --------
おっとどっこい、タイムサーバーに同期させるにはAfter=network-online.targetとしただけではだめでした。
(別記事にします)


posted by すら at 20:47| Ubuntu