指定したタイミングでコマンドを自動実行してくれる cron 。sudo を含むコマンドを cron で実行するのには、少し工夫が必要です。
一般ユーザとして、sudo を含む crontab を設定してみます。まずは、
でエディタを起動して、中身を以下のように記述、保存。
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 毎日、午前3時に実行。エラー出力を自分のホームディレクトリに書き出し。
0 3 * * * sudo なにがしかのコマンド 2>>/home/自分のユーザ名/cron_error
さて、指定した時刻が来て cron が実行された後にエラー出力ファイル・cron_error を覗いてみると
…と、こんなのが出力されています。端末なし・パスワード無しだと "sudo" が正常に実行されないようですな。セキュリティの都合でこういう設定になっています。
さあ、cron で sudo を含むコマンドを自動実行するにはどうしたら良い?
ネットを検索すると、よく「/etc/sudoers を編集して、端末(TTY)なし・パスワード無しで sudo を実行できるようにする」 という方法が紹介されています。
このような設定をするよりも「sudo su で root になって、root の crontab にジョブを登録」するほうが安全確実簡単ではなかろうか。
「cron で sudo が必要なコマンドを実行したい」と思っているということは、あなたのアカウントは sudoer な訳です。つまり、コマンドラインで直接 sudo を実行することはできますね。ということは、
で root になれます。通常は。
root になれたら、
で、root ユーザーの crontab ファイルを編集してジョブを登録してみましょ。内容は例えば、
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 毎日、午前3時に実行。
0 3 * * * なにがしかのコマンド
root の crontab は root 権限で動作するので、登録するコマンドフィールドに sudo は必要ありません。
無闇に一般ユーザの権限を拡張するよりも、セキュリティの面から見てもこのほうが良くないですか? システム管理に関わる作業は管理者 の crontab に、ユーザ個人の作業はユーザの crontab で…というふうに分けておいたほうがすっきりするし。
もうひとつ、別の方法。
主にシステムサービスなどが利用する crontab ファイルは、以下の場所にあります。
あるいは…
/etc/cron.d/ファイル名
などなど…
ここら辺にある crontab ファイルを試しに開いて見てみればわかりますが、ユーザーベースの crontab と書式は殆ど同じです。ただ、このシステムワイドな crontab の場合、コマンドの実行ユーザ名を指定できるフィールドがあります。
ということは…。
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#分 時 月 日 曜日 ユーザ名 コマンド
0 3 * * * root なにがしかのコマンド
みたいな crontab ファイルを作って、ディレクトリ /etc/cron.d/ の下に適当な名前で置いてやれば良いですね。上記の方法と同様な動作をする筈です。
ちなみに、ユーザごとの cron 設定ファイル(コマンド crontab -e で編集できるやつ)の保存場所は何処なのだろう。
ここにあります。
crontab をバックアップしたい…などのときは、ここを覗けばOKです。
コメント