我在我的 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 实用程序在与 shell 环境不同的环境中运行命令,甚至可能使用与默认 shell 不同的 shell。要查看您的 cron 环境,您可以使用该env
命令,例如添加以下 crontab:
* * * * * env > ~/cronenv
一分钟后,检查~/cronenv
文件以查看 cron 环境(取自如何模拟cron执行脚本的环境?)。您可以将其与您的 shell 环境进行比较,以帮助调试与 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
)是否会出现相同的错误。