我有一个相当简单的 shell 脚本 ( foo.sh
),如下所示:
#!/bin/bash
echo -n "$USER,$(date)," `binary -flags | sed -e '1,30d'`;
exit 0;
该脚本应该准备一些输出,然后将其附加到文本文件中,如下所示:
foo.sh >> data.csv
当我在 root 提示符下运行上述命令时,它工作正常。但是,当我在我的(根)crontab 中输入完全相同的命令时,如下所示:
05 * * * * /root/foo.sh >> /path/to/data.csv
crontab 输出不同!我没想到会这样,我也不明白为什么。请参阅下面的示例:
Expected, normal output from running my .sh (example):
Fri Jun 14 16:32:34 CEST 2013,20130614163304,268828672,71682561
The output written to the file by cron:
Fri Jun 14 16:32:34 CEST 2013,
.sh 中二进制运行的权限如下所示:
-rwxr-xr-x 1 root root
为什么输出不同?如何将正确的输出放入我的 CSV 文件中?
答案1
你不能指望拥有相同的环境cron
在通过交互方式运行的程序中。在这种情况下,有两个差异可能很重要:
当前工作目录
这
PATH
如上所述jordanm
,其中一项或两项的组合会导致脚本找不到您的binary
程序。
如果您查看本地系统邮件(例如通过运行mailx
),您可能会发现抱怨此故障的消息。
crontab
在编写要运行的条目和脚本时,这是标准做法,cron
将路径硬编码到程序的已知位置。