前回ラズパイでホームサーバーを構築して常時起動するようにしましたが、OLEDディスプレイにCPU情報を表示するプログラムを常駐させていると夜に眩しくて寝れないという事に気づきました。
slowtech.hateblo.jp
slowtech.hateblo.jp
今回はこれを1日のうち指定した時間だけ実行するようにしました。
プログラムをスケジュールで動かすためにはsystemdで制御します。
起動用タイマーを設定してサービスファイルを呼び出す
sudo nano /etc/systemd/system/cpu_oled_on.timer
[Unit] Description=Start CPU OLED at 6:00 [Timer] OnCalendar=*-*-* 06:00:00 Persistent=true [Install] WantedBy=timers.target
ここまでがタイマーの作成、以下がサービスの作成
sudo nano /etc/systemd/system/cpu_oled_on.service
[Unit] Description=Start CPU OLED Service [Service] Type=oneshot ExecStart=/bin/systemctl start cpu_oled.service
停止用のタイマーも同様に作ります。
sudo nano /etc/systemd/system/cpu_oled_off.timer
[Unit] Description=Stop CPU OLED at 21:00 [Timer] OnCalendar=*-*-* 21:00:00 Persistent=true [Install] WantedBy=timers.target
ここまでがタイマー、以下がサービス
sudo nano /etc/systemd/system/cpu_oled_off.service
[Unit] Description=Stop CPU OLED Service [Service] Type=oneshot ExecStart=/bin/systemctl stop cpu_oled.service
有効化します。
sudo systemctl daemon-reload sudo systemctl enable cpu_oled_on.timer sudo systemctl enable cpu_oled_off.timer sudo systemctl start cpu_oled_on.timer sudo systemctl start cpu_oled_off.timer
これで設定は完了。確認は以下のコマンドです。
systemctl list-timers
実行すると以下のような結果がでました。
NEXT LEFT LAST PASSED UNIT ACTIVATES Sun 2025-12-14 21:00:00 JST 12h - - cpu_oled_off.timer cpu_oled_off.service Mon 2025-12-15 06:00:00 JST 21h - - cpu_oled_on.timer cpu_oled_on.service
ちゃんと21:00と6:00に設定したタイマーが予定に組み込まれてますね。
プログラムをタイマーで動作させるには、cronというものがあるらしいですが、ChatGPTはcronは古くて今回の使い方には合わないからtimerを使えと言ってきました。
cronは管理面、ログ面、起動停止などの柔軟性に欠けるらしいです。
.serviceファイルの、ExecStart=サービス名は複数個設定しても動作するらしいので、他のサービスも1つのタイマーで制御できるのは便利ですね。