cron経由でsudoを含むバッチを実行する

特定のディレクトリの使用量を計測するために、バッチを作成したのですが一部のディレクトリが権限が無いために見れないため、sudoを付加した状態で実行することにしました。
コンソールからバッチを実行した際には問題なかったのですが、cron経由では実行されないと言う事象に見舞われオロオロです。

 

実行しているバッチでエラーが出ていないかを見るために、/dev/nullとしていた箇所をログを出力する様に変更し何が起きているかをチェックしてみました。

#
# crontab
#

# 変更前
30 * * * * ./batch.sh > /dev/null 2>&1

# 変更後
30 * * * * ./batch.sh > /var/log/batch.log 2>&1

 

cron経由で実行後、下記の内容がログに出力されていました。

sudo: sorry, you must have a tty to run sudo

 

「tty経由じゃないとsudoは出来ない」って言ってるっぽいです。

 

そんなこと言われても、1時間おきに実行したいので動いてくれないと困ります。
と言う訳で、visudoの設定を変更しcron経由でもsudo出来る様にしたいと思います。

 

まずは、下記のコマンドを実行します。

sudo visudo

 

画面が表示されたら、「Defaults requiretty」の箇所を探します。
※恐らく下記のような感じの部分があると思います。

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults        requiretty

 

対象となる箇所の先頭に「#」を入力しコメントアウトします。

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
# コメントアウト
#Defaults        requiretty

 

今回の場合は、特定のユーザーの場合だけなので下記の方法で対応しました。

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults        requiretty
# 追加
Defaults:user !requiretty

 

この状態で保存することで、cron経由でのバッチ処理の中でsudoが含まれる内容があっても実行する事が可能になります。
sudoが使用しやすくなってしまうため、セキュリティ的にはよろしくない感が強いと言う事を理解した上で設定をして下さい。

関連する記事

コメントを残しませんか?