Как насчет использования команды 'script' -?
$ script logfile
$ somecommand
lots of command output...
Все, что вы делаете в оболочке, будет записываться в лог-файл. Остановить с помощью Ctrl+D.
Если вам это нужно только для одной команды, вы можете использовать опцию ' -c' -:
-c, --command command Run the command rather than an interactive shell. This makes it easy for a script to capture the output of a program that behaves differently when its stdout is not a tty.
Я предполагаю, что окружающая среда выглядит не так, как вы ожидаете. Cron выполняет задания практически в пустой среде. Это очень хорошая привычка использовать полные квалифицированные пути. Кроме того, я также предпочитаю явно указывать интерпретатор любого скрипта. До такой степени, что я обычно запускаю любой скрипт .sh
с помощью/bin/sh -c /mypath/myscript.sh
(при использовании crontab!)
Что происходит, так это то, что запись crontab
выполняется с SHELL
, установленным crontab (см. crontab (5)). Это /bin/sh
по умолчанию. Это , а не оболочка входа в систему, поэтому среда не выглядит так, как если бы вы запускали ее вручную. Вы не указываете явно интерпретатор в своем сценарии, а используете трюк env . Мое предположение заключается в том, что окружающая среда выглядит не так, как ожидалось.
Затем я сделал бы что-то подобное (сcrontab -e
):
*/5 * * * * /usr/bin/perl /root/bin/ars-reconnect.pl
Для получения дополнительной отладочной информации я бы вывел все в файл:
*/5 * * * * /usr/bin/perl /root/bin/ars-reconnect.pl >/root/crondebug.output 2>&1
Вывод cronjob обычно отправляется вам по почте, но описанное выше может быть проще, если на одну движущуюся часть меньше.
Это означает, что вам, вероятно, также следует обновить свой скрипт:
$ping = system("/sbin/ping -c4 8.8.8.8");
Вы можете установить PATH
в файле crontab, но лично я редко так делаю. Обратите внимание, что значение по умолчанию PATH
различается между 10.2 и добавлены более новые версии(/usr/local
).