使用命名pipe道logging

我有很多代码需要daemonize打印到标准输出。 我正在考虑使用下面的shell脚本来创build一个命名pipe道,所以我可以禁止一个进程,同时将其输出redirect到pipe道。

 #!/斌/庆典

 ############### 3
 #创build一个名为pipename的pipe道,将redirect到文件名并在Cc上旋转日志
 ############### 3

如果[$#-ne 2]; 然后
     echo“USAGE:./$0 pipename filename” 
    退出-1
科幻

 pipename = $ 1; 
如果[-p $ pipename]; 然后
     rm $ pipename;
科幻
 origname = $ 2.login
文件名= $ 16

改名()
 {
     newfilename =“$ origname -`date +%s`”
     mv $ origname $ newfilename
     nohup nice -n 20 tar -czvf $ newfilename.tar.gz $ newfilename&
    陷阱重命名2
 }

 mkfifo $ pipename
陷阱重命名2

而[1-eq 1]
做
    读取input
     echo $ input >> $ origname
完成$ pipename

那么我可以用下面的方式开始一个过程:

nohup myprog.py > namedpipe 2>&1 &

开始之后,我会设置一个cron作业来发送一个旋转信号。

这个脚本健壮/有效吗?

没有。

如果namedpipe已经存在,则打印一条警告并停止,而不是简单地删除它:正在使用它的脚本会发生什么? 查看/etc/init.d中的现有脚本。 查看Debian和Ubuntu(或任何Debian派生的发行版)上的start-stop-daemon。

错误消息应该去stderr,而不是标准输出。 最后inputredirect丢失。 Tar增加了不必要的开销:只是gzip文件。

等等。

但是在任何情况下,所有这些都不需要将日志旋转添加到以nohup copytruncate脚本中:只需在logrotate使用copytruncate选项(请参阅man logrotate ); 并放弃你的命名pipe道解决scheme。