アドベントカレンダー駆け込み参加 & 初投稿失礼いたします!
はじめに
ネットでとりとめのないことを調べているうちに、夜遅くなってしまい、焦ったことはありませんか?
私は頻繁にそうなっていました。
対策案として、深夜帯に一定間隔の自動シャットダウンを設定することにしました。
いちいち電源つけ直してブラウザ開くのは手間がかかるので、ソフトに効くと思ったのです。
Windowsではタスクスケジューラーから設定できましたが、Linuxには同様の設定アプリがありませんでした。
そこで標準のシステム管理ソフトsystemdを用いて、深夜帯のみ・一定間隔の自動シャットダウンを設定しました。
この記事は、その際の手順を残したものです。
概略
「深夜帯に一定間隔で動作するタイマー役」と
「シャットダウンのbashコマンド実行役」の2つのsystemdユニット(≒ジョブ)を作成します。
前者のタイマー役を常時稼働させて、タイマーが切れるごとにbashコマンド実行役を呼ばせることで、深夜帯の自動シャットダウンを実現します。
systemdのタイマーサービスはコマンド実行のために2つのサービスに分ける必要があるので、このような形をとっています。
シャットダウン役のユニットファイル作成
タイマーから呼び出される側のシャットダウンコマンド実行役となるユニットファイルを作成します。
このファイルは/etc/systemd/systemディレクトリに保存します。
「shutdown」をシャットダウンコマンドにした場合のサンプルコードは以下の通りです。
[Unit]
Description=Service to Shutdown the system, run by a timer
[Service]
Type=oneshot
ExecStart=/bin/shutdown
[Install]
WantedBy=multi-user.target
ポイントは、[Service]セクション以下のExecStartです。
このユニットが呼び出された際に実行されるコマンドが、=の右に指定されています。
タイマー役のサービス作成
タイマー役となるユニットファイルを作成します。
毎日の22時から翌3時の間、15分間隔でイベントを発生させるコードは以下の通りです。
TimerセクションのUnitはタイマーが切れた際に実行するユニットのことで、上記で作成したユニットファイル名を記載します。
このファイルは/etc/systemd/systemディレクトリに保存します。
[Unit]
Description=Timer to shutdown the system
[Timer]
OnCalendar=*-*-* 22,0..3:00/15:00
AccuracySec=1s
Unit=shutdown.service
[Install]
WantedBy=multi-user.target
タイマーの起動
最後にタイマーを起動します。ここまでの例の場合、次のコマンドで実行できます。
sudo systemctl start shutdown.timer
まとめ
systemdを用いることで、Linuxで自動シャットダウンが実装できました。
具体的には、タイマー役とコマンド実行役の2つのsystemdユニットファイルを作成し、タイマー役を常時稼働させることで実現しています。
時間帯指定は、タイマー役のOnCalendarフォーマットに記載する日付の後の部分がポイントです。
最後までお読みくださり、ありがとうございました。
Merry Christmas!