crontab タスクを 1 分ごとに実行するように設定しました。
* * * * * sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php
var/log/syslog ファイルにログが記録されています:
Jan 3 15:14:01 clearthefog CRON[26579]: (root) CMD (/usr/bin/php /home/admin/scrapers/terra_plf/terra_swap_api.php)
Jan 3 15:15:01 clearthefog CRON[26623]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
まだ、DBには何も書き込まれませんファイルterra_swap_api.php
が実行するはずです。理由を教えてください。ファイルが実際に実行されたかどうかを確認する方法はありますか?
同じスクリプトをCLIで実行すると、完璧に動作します: php terra_swap_api.php
答え1
cron では sudo パスワードを要求されるため、単純に sudo を実行することはできません。そのコマンドにはパスワードなしの sudo を設定する必要があります。
php ファイルは /root ディレクトリにあるため (セキュリティ上の懸念事項であることに注意してください)、crontab を root ( sudo crontab -e
) としてインストールし、そこに行を追加することができます (sudo なし)。
スクリプトに root 権限が必要ない場合は、sudo なしで実行できますが、/root は root ユーザーが所有し、制限されているため、ファイルを読み取り可能な場所に移動する必要があります。