OSCA

cron / JP1 などから sudo してコマンドが叩けない (sorry, you must have a tty to run sudo)

このエントリーをはてなブックマークに追加

現在携わっているプロジェクトで定期的にシェルを実行しているんだけど、シェルの中でsudoしようとしたら「sorry, you must have a tty to run sudo」というエラーメッセージが出たのでメモ。

sudoの設定項目に「Defaults requiretty」という設定項目がある。 この項目は読んでそのままだが「TTYからの実行の場合に実行を許すか」という設定項目。 もっと解りやすく言えば「人がコンソールでログインした時だけsudoを許可するか?」という意味に近い。

定期的にシェル(ジョブ)を呼び出してくれる cron や JP1のジョブ管理 などはコンソール端末などでログインしている訳ではないので、「Defaults requiretty」の設定にひっかかってしまっている。 まさしくエラーメッセージの通り「ごめん、sudoを実行するにはttyからやる必要あるんだわ」ということである。

よって cron などからの sudo を許可するためには、この「Defaults requiretty」の設定を visudo などでコメントアウトしてあげれば良い。

著者 : OSCA

OSCA

個人として何か一つでも世の中の多くの人に使ってもらえるサービスを作ろうと日々奮闘中のエンジニア。 夜景好きのアマチュア写真家でもあります。
Twitter : @oscaphoto
Facebook : OSCA