我有很多代码需要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。