Bashファイルでfindコマンドを使用する[閉じる]

Bashファイルでfindコマンドを使用する[閉じる]

私は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コマンドなどの他のコマンドを使用しても同じエラーが発生することを確認してください。

関連情報