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 などでコメントアウトしてあげれば良い。