ubuntu/LinuxMintでcronを利用したshutdown処理

記事の更新日:2026/09/30 評価を加筆

1.概要

ubuntu環境で長時間稼働する環境を構築したのですが、処理の起動と処理の終了を組み込む必要がありました。処理の起動はrc.localを作成して、電源オンをすることで処理の起動を組み込むことができました。処理の終了は時間指定による終了が良いと考えて、cronを組み込むことにしました。

しかし、ubuntu desktop環境を自動でshutdownするために、crontabを作成したのですがうまく行きません。root権限の設定をどのようにすると良いかがわかりませんでした。色々と試してみて実現をすることができたので、その内容と対処方法に関して記述します。

私の評価は以下の通りです。

(1) cronをroot権限で実行した経験がなかったので、はじめての経験でした
(2) shtudown処理を利用者権限に設定すると、MTA導入というエラーで悩みました
(3) ネットで調べても良い答えがなく、root権限の問題と気が付きました
(4) sudo crontab -eの実行に気がつくまでに、少し時間が必要でした

2.詳細

普通にubuntuにloginした状態でcrontab利用し、時間指定でshutdownを動かしてみます。
$ crontab -e

設定内容は以下の通りで、利用者権限でshutdownを利用できるので、15:00にshutdownを実行して停止しそうです。
0 15 * * * shutdown -h now

しかし、shutdownは実行されません。/var/log/syslogを参照すると下記ログが記録されています。
(username) CMD (shutdown -h now)
(CRON) info (No MTA installed, discarding output)

参考資料を参照するとMTAを導入との記述ですが、違うような気がしました。

そこで、権限不足が理由ではないかと考えて、sudoでcrontabを作成しました。
$ sudo crontab -e

設定内容は1時間変更して、16:00にshutdown実行です。
0 16 * * * shutdown -h now

これで想定通りに動作します。

3.所見

crontab内にsudoを記述することを最初に考えたのですが、パスワードを入力できないと気がついて、sudo crontabにたどり着きました。shutdownやrebootはterminalからsudo指定なしで実行できるので気が付きにくいことです。

crontabはユーザー権限で利用する機会が多いのでroot権限が必要な処理の組み込みをする機会がなかったことが要因です。よく考えるとroot以外のユーザーでroot権限を利用するためにはsudoコマンドとパスワードが必要なので実現は簡単ではありません。これも良い経験であったと思っています。

4.追加

PCの自動運転の最大のボトルネックは電源オンの操作です。電源ボタンを押す操作だけですが、実現する手段が容易ではありません。電源部分にタイマーを組み込んだとしても電源供給が開始されるだけのことで、電源ボタンを押す操作はできていません。

サーバ室のラックに搭載されている機器は電源オンの状態で利用します。高価なサーバ室環境の場合は給電停止になることはなく、サーバ本体が壊れてしまうまで稼働を続けます。このような設備を個人で用意することは容易ではありません。

ネットワーク経由でパソコンの電源をオンにするには、Wake on LAN(WoL)の仕組みがあります。しかし、待機しているPCに対して割り込みを入れて起動する仕組みです。個人用途では少し使えない気がします。

NotePCはレジューム機能があり、これを利用して待機させた状態にプログラムを作成して復帰状態医にできると良さそうですが、OSレベルへの操作が必要そうで簡単ではない気がいします。

参考

[本ブログ内参照]
・rc.localを利用したubuntuのPC起動時の処理実行
・IPアドレスをセグメント記述と数値記述に相互変換する方法
[外部サイト参照]
・"(CRON) info (No MTA installed, discarding output)" error in the syslog

コメント