shell 脚本未使用 crontab 运行

shell 脚本未使用 crontab 运行

这是我的脚本

mboxutil -l > n.txt
sed 's/^.*user//' n.txt > n1.txt
cat n1.txt | sed 's/^.//' > n2.txt
sed 's/\/.*//' n2.txt > dss_list.txt
rm -f n.txt
rm -f n1.txt
rm -f n2.txt

sed -e '/^$/d' -e '1d' dss_list.txt > all-dss-accounts.txt
rm -f dss_list.txt
CNT=`wc -l < all-dss-accounts.txt`
mailx -s "DSS count on `date` is $CNT" [email protected] < all-dss-accounts.txt

当我直接运行脚本时,它会执行。但在 crontab 上,它不能正确执行。

这是 cron 条目。

10 14,16,18,20,22 29 6 * /root/scripts/extract.sh

每月6月29日下午2点、4点、6点、8点、10点第10分钟。

我不确定,但我有一种感觉,我使用脚本临时创建的 .txt 文件需要包含需要在其下创建的目录。

我对吗?帮我!

答案1

您需要使用输出文件的完整路径,可能还需要使用可执行文件的完整路径。当在 cron 中运行时,没有预先存在的环境可以让它知道工作目录或路径等信息。

答案2

使用完整路径来确保功能。

在这种mboxutil情况下,您必须知道命令所在的位置。

执行:

$ type -a mboxutil
mboxutil is hashed /opt/sun/comms/messaging64/bin/mboxutil

更新你的脚本:

/opt/sun/comms/messaging64/bin/mboxutil -l > /path/to/n.txt
sed 's/^.*user//' /path/to/n.txt > /path/to/n1.txt
cat /path/to/n1.txt | sed 's/^.//' > /path/to/n2.txt
sed 's/\/.*//' /path/to/n2.txt > /path/to/dss_list.txt
rm -f /path/to/n.txt
rm -f /path/to/n1.txt
rm -f /path/to/n2.txt

sed -e '/^$/d' -e '1d' /path/to/dss_list.txt > /path/to/all-dss-accounts.txt
rm -f /path/to/dss_list.txt
CNT=`wc -l < /path/to/all-dss-accounts.txt`
cat /path/to/all-dss-accounts.txt | mail -s "DSS count on `date` is $CNT" [email protected]

chmod要跳过文件权限问题,请在脚本的最后添加以下行

chmod 777 /path/to/all-dss-accounts.txt

试一下!

相关内容