Ограничьте stdout от непрерывно рабочего процесса

Можно сделать это, например, с жемчугом и некоторой простой математикой:

cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60' 

Если Вам не требуются секунды, можно просто работать uptime команда. Его вывод может затем быть просто преобразован к DD:HH:MM.

Например, использование (прокладывает себе путь только если время работы> 1 ч

 uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
3
13.11.2012, 23:56
2 ответа

Вот быстрое и грязное решение только сохранить последнюю строку вывода в файле журнала:

ping localhost | 
  while IFS= read -r line; do 
    printf '%s\n' "$line" > log.txt; 
  done

Остерегайтесь этого, у Вас теперь, вероятно, есть все виды условий состязания при попытке получить доступ к файлу для чтения. "Блокировка" файла от взаимного доступа могла бы помочь. Для получения дополнительной информации о соединении этого вопроса stackoverflow мог бы быть хорошим началом: Как делают я синхронизируюсь (блокируют/разблокируют) доступ к файлу в ударе из нескольких сценариев?

6
27.01.2020, 21:14

Попробуйте этот сценарий, он работает на меня:

% nohup ping 127.0.0.1 > log.txt >&1&

Проверьте, работает ли процесс путем ввода:

% ps ax | grep ping

Если процесс работает:

% tail -f log.txt

Если это продолжает проверять с помощью ping-запросов, Ваш сценарий работает правильно.

0
27.01.2020, 21:14

Теги

Похожие вопросы