Простите за расплывчатое название, сложно описать одним предложением :)
У меня есть задание cron, которое выполняется на машине FC4. Задание cron, запущенное от имени root, выполняется нормально, но одна строка в запущенном скрипте перенаправляет вывод в файл, и он не работает должным образом.
Например:
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-байтовый файл.
Не уверен, что это тривиально или сложно, но есть ли у кого-нибудь идеи относительно того, почему это происходит?
Спасибо!
Ян
Во-первых, как уже сказал mailq, при вызове скрипта из задания cron, которое может запускаться от имени совершенно другого пользователя, используйте абсолютные пути.
Во-вторых, запускает ли это задание cron тот же пользователь, с которым вы его тестировали?
ВСЕГДА тестируйте любые скрипты, которые вы собираетесь запускать через cron, при тех же обстоятельствах - среда при запуске через cron отличается от обычной интерактивной пользовательской оболочки!
Наконец, вы, вероятно, можете избежать двух из трех экземпляров relative-pathanme, просто передав вывод в grep:
grep -o 'complicated regex' <(your wget line) > /absolute/output/file
Это позволяет полностью избежать относительных файлов за счет использования автоматических временных файлов.