抱歉,标题比较模糊,用一句话很难描述:)
我有一个在 FC4 机器上运行的 cron 作业。以 root 身份运行的 cron 作业运行正常,但正在运行的脚本中有一行将输出重定向到一个文件,因此无法按预期工作。
例如:
wget --user=user --password=password \
--no-check-certificate -O output.txt \
http://server/location/jobadmin.php?menu=16
cat output.txt | grep -o \
'\(location\/autoprocess_test.php?autoprocesskey=true&\)\([a-Z0-9=&-]\)\{1,\}' \
> jobs.txt
我注意到,当我以 root 身份手动运行此脚本时,它工作正常。但是,当它在 cron 上运行时,它不会将输出重定向到指定的文件,而只是在原处留下一个 0 字节文件。
不确定这是一件小事还是困难的事,但有人知道为什么会发生这种情况吗?
谢谢!
伊恩
答案1
首先,正如 mailq 已经说过的,当从 cron 作业调用脚本时 - 可能以完全不同的用户身份运行 - 请使用绝对路径名。
其次,运行此 cron 作业的用户是否与您测试该作业的用户相同?
始终在完全相同的情况下测试您打算通过 cron 运行的任何脚本 - 通过 cron 运行时的环境与正常的交互式用户 shell 不同!
最后 - 您只需将输出提供给 grep 即可避免三个relative-pathanme 实例中的两个:
grep -o 'complicated regex' <(your wget line) > /absolute/output/file
通过使用自动临时文件,可以完全避免相关文件。