运行 cron 作业并通过 > 将输出重定向到文件时出现问题

运行 cron 作业并通过 > 将输出重定向到文件时出现问题

抱歉,标题比较模糊,用一句话很难描述:)

我有一个在 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

通过使用自动临时文件,可以完全避免相关文件。

相关内容