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