こんにちは、zawato(zawato7)です。
今日も今日とて、エラーを解決していきますか。
問題事象:crontabコマンドでシェルスクリプトが実行されない
環境
- Mac OS Sonoma 14.7
問題事象
定期実行させたいシェルスクリプトを用意して、crontabを更新したにも関わらず、設定したタイミングに実行されていませんでした。
例として、以下のような簡単なシェルスクリプトを用意しました。
echo $(date) >> ~/Desktop/crontab.log
これは、実行した日時をログファイルに追記するスクリプトです。初回実行時にデスクトップ直下にcrontab.logファイルが作成されます。
上記のシェルスクリプトを定期実行するために、crontabコマンドを編集しました。具体的な編集方法は以下の通りです。
ターミナル上で「crontab -e」と入力し、実行する。
Vimが開くので、「i」キーを入力し、挿入モードに切り替える。
「00 5,17 * * * zsh ~/Desktop/test_crontab.sh」と追記する。
「esc」キーを入力し、「:w」と入力し、内容を保存する。
「:q」と入力し、Vimを閉じる。
3.のコマンドは、毎日5時と17時にtest_crontab.shを実行するというものです。
具体的なcrontabコマンドの記載方法については、以下の記事を参考にしてみてください。
これで、定期実行されるはずなのですが、なぜか設定した日時になってもログファイルに追記されていませんでいた。
対処法
対処方法は、以下の2ステップでした。
- chmodコマンドによる権限確認
- 「フルディスクアクセス」を許可する
それぞれについて、詳しく紹介します。
1. chmodコマンドによる権限確認
新しくシェルスクリプトを作成した際に、実行権限がどうなっているか確認しておく必要があります。
具体的には、ls コマンドで確認します。
ls -la
すると以下のような出力がされると思います。
どうやら、ファイルの所有者に対して、r(読み取り)と w(書き込み)が許可されているのですが、x(実行)が許可されていませんでした。
そのため、chmod コマンドで、権限を付与してあげる必要がありました。
chmod +x test_crontab.sh
これで、シェルスクリプトを実行することができるようになりました。
2. 「フルディスクアクセス」を許可する
Mac OSで cron コマンドを実行させるためには、どうやら「フルディスクアクセス」を許可する必要があるようです。
「フルディスクアクセス」を許可する手順は以下の通りです。
- 「システム環境設定」を開く
- 「プライバシーとセキュリティ」を開く
- 「フルディスクアクセス」を開く
- 「+」を押す。(※この時、パスワードを求められることがあります。)
- Finderが開くので、「command+shift+G」と入力すると検索窓が開きます
- 「/usr/sbin/cron」と入力し、移動する。(※/usr/bin/cronではないので注意!)
- 開くをクリックし、cronを追加する
以下のように、フルディスクアクセスにcronが追加されていればOK!
お疲れ様でした。対処法は以上になります。
これで、crontabコマンドが定期的に動いて、シェルスクリプトが実行されるはずです。
おわりに
参考になれば嬉しいです!!!
また、似たようなエラーや他の対処法などがあればコメントください!!!
ここまで読んでいただけた方はいいねとストックよろしくお願いします。
@zawato をフォローいただけると励みになります。
データサイエンス・プログラミング・IT資格に関するブログも書いているので、チェックしてみてください!↓