私はLinuxボックスでこのスクリプトを使用して、昨日修正されたすべてのファイルを見つけます。
#!/bin/bash
find /home/*/domains/*/public_html/ -name "*.php" -mtime -1 | while read line; do
echo "$line"
done
手動で実行するとスクリプトは期待どおりに機能しますが、次の場所で実行すると次のエラーで失敗しますcron
。
find: `/home/*/domains/*/public_html/': No such file or directory
ディストリビューション: Centos 5
予約されたもの:
#DO NOT EDIT THIS FILE. Change through DirectAdmin
[email protected]
*/1 * * * * bash /home/admin/check_phpfile_changed.sh
一重引用符は機能しません。
答え1
cronユーティリティはシェル環境とは異なる環境でコマンドを実行し、デフォルトシェルとは異なるシェルを使用することもできます。 cron環境を表示するには、このenv
コマンドを使用できます。たとえば、次のcrontabを追加します。
* * * * * env > ~/cronenv
しばらくして、~/cronenv
ファイルを確認してcron環境を確認してください(次から入手)。cronがスクリプトを実行する環境をシミュレートする方法は?)。 cron関連のエラーをデバッグするのに役立つように、これをシェル環境と比較できます。 cron 環境を使用してスクリプトを直接実行することもできます。
env - `cat ~/cronenv` /bin/sh
デバッグ用にスクリプトを変更することもできます。
#!/bin/bash
ls -ld /home/*
ls -ld /home/*/domains/*
find /home/*/domains/*/public_html/ -name "*.php" -mtime -1 | while read line; do
echo "$line"
done
cronjobで実行し、ls
コマンドなどの他のコマンドを使用しても同じエラーが発生することを確認してください。