对于模糊的标题感到抱歉,用一句话来描述就有些困难:)
我有一个在FC4机器上运行的cron作业。 以root身份运行的cron作业运行得很好,但正在运行的脚本中的一行将输出redirect到文件,并且不能按预期工作。
例如:
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
我注意到,当我手动运行这个脚本作为根,它工作得很好。 但是,当它在cron上运行时,它不会将输出redirect到指定的文件,它只会留下一个0字节的文件。
不知道这是微不足道的还是困难的,但有没有人有任何想法,为什么发生这种情况?
谢谢!
伊恩
首先,正如mailq已经说过的那样,当从一个cron作业调用一个脚本 – 可能作为一个完全不同的用户运行 – 使用绝对path名。
其次,运行这个cron作业的用户是否与你testing过的用户相同?
总是在完全相同的情况下testing你打算通过cron运行的任何脚本 – 通过cron运行的环境与正常的交互式用户shell不一样!
最后 – 通过将输出提供给grep,可以避免三个相对pathanme实例中的两个:
grep -o 'complicated regex' <(your wget line) > /absolute/output/file
这通过使用自动临时文件完全避免相关文件。