Ведение журнала с именованными каналами

У меня есть много кода, который мне нужен для того, чтобы распечатать его на стандартном уровне. Я подумываю использовать следующий сценарий оболочки для создания именованного канала, чтобы я мог не выполнять процесс, перенаправляя его вывод в канал.

#! / Bin/ Баш

###############3
# создает канал с именем pipename, который будет перенаправлять на имя файла и вращать логи на Cc
############### 3

if [$ # -ne 2]; затем
    echo "ИСПОЛЬЗОВАНИЕ: ./$0 имя файла pipename" 
    выход -1
фи

pipename=$1; 
if [ -p $pipename ]; затем
    rm $pipename;
фи
origname=$2.log
имя файла = $ 2

переименование ()
{
    newfilename="$origname-`date +%s`"
    mv $origname $newfilename
    nohup nice -n 20 tar -czvf $newfilename.tar.gz $newfilename &
    переименование ловушки 2
}

mkfifo $ pipename
переименование ловушки 2

в то время как [ 1 -экв 1 ]
делать
    читать ввод
    echo $input >> $origname
готово $ pipename

Тогда я мог бы начать процесс следующим образом:

nohup myprog.py > namedpipe 2>&1 &

После его запуска я бы настроил задание cron, чтобы отправить ему сигнал на ротацию.

Является ли этот скрипт надежным / эффективным?

1 ответ

Нет.

Если namedpipe уже существует, выведите предупреждение и остановитесь, а не просто удалите его: что происходит со сценарием, который его использовал? Посмотрите на существующие скрипты в /etc/init.d, Посмотрите на start-stop-daemon в Debian и Ubuntu (или любом дистрибутиве, производном от Debian).

Сообщения об ошибках должны отправляться в stderr, а не в stdout. В конце отсутствует перенаправление ввода. Tar добавляет ненужные накладные расходы: просто распакуйте файл.

И так далее.

Но в любом случае все это не нужно, чтобы добавить ротацию журналов в сценарии, запущенные с nohup: просто используйте copytruncate вариант в logrotate (увидеть man logrotate); и отказаться от вашего именованного решения канала.

Другие вопросы по тегам