Ведение журнала с именованными каналами
У меня есть много кода, который мне нужен для того, чтобы распечатать его на стандартном уровне. Я подумываю использовать следующий сценарий оболочки для создания именованного канала, чтобы я мог не выполнять процесс, перенаправляя его вывод в канал.
#! / 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
); и отказаться от вашего именованного решения канала.