Принудительно сбрасывать вывод в файл, пока скрипт bash все еще работает - PullRequest
68 голосов
/ 16 сентября 2009

У меня есть небольшой скрипт, который ежедневно вызывается crontab с помощью следующей команды:

/homedir/MyScript &> some_log.log

Проблема с этим методом в том, что some_log.log создается только после завершения работы MyScript. Я хотел бы сбросить вывод программы в файл, пока он работает, чтобы я мог делать такие вещи, как

tail -f some_log.log

и отслеживать прогресс и т. Д.

Ответы [ 13 ]

0 голосов
/ 30 мая 2010

У меня была эта проблема с фоновым процессом в Mac OS X с использованием StartupItems. Вот как я это решаю:

Если я сделаю sudo ps aux, я увижу, что mytool запущен.

Я обнаружил, что (из-за буферизации), когда Mac OS X выключается, mytool никогда не передает вывод команде sed. Однако если я выполню sudo killall mytool, mytool передаст вывод команде sed. Поэтому я добавил stop случай к StartupItems, который выполняется, когда Mac OS X завершает работу:

start)
    if [ -x /sw/sbin/mytool ]; then
      # run the daemon
      ConsoleMessage "Starting mytool"
      (mytool | sed .... >> myfile.txt) & 
    fi
    ;;
stop)
    ConsoleMessage "Killing mytool"
    killall mytool
    ;;
0 голосов
/ 16 сентября 2009

хорошо, нравится вам это или нет, так работает перенаправление.

В вашем случае вывод (т.е. ваш сценарий завершен) вашего сценария перенаправлен в этот файл.

То, что вы хотите сделать, это добавить эти перенаправления в ваш скрипт.

0 голосов
/ 16 сентября 2009

Я не знаю, сработает ли это, но как насчет вызова sync?

...