这是在 Ubuntu Server 14.04 上,但我认为它适用于所有操作系统。我正在logrotate
作为 cron 作业运行,cron 设置是默认值(logrotate
存在于/etc/cron.daily
)。我正在运行一个对其日志文件很挑剔的程序——当日志文件被触摸时,该程序不会结束,但它会停止执行任何操作。
我logrotate
使用以下配置进行设置,相关脚本除了停止和启动给定程序之外什么也不做。当我运行时,logrotate -vf /etc/logrotate.conf
它工作得很好——程序被终止,所有日志都被轮换,并且程序重新启动。然而,当它自动运行时,有些东西不起作用——我早上起床,程序正在运行,但没有做任何事情,就好像它的日志文件在运行时被触及一样。日志被旋转,也是logrotate
如此,但它显然没有正确停止/启动程序。这些脚本在所有点上都使用完整路径,没有任何内容被缩短。
是否logrotate
以其默认设置(logrotate
在 中/etc/cron.daily
)以 root 身份运行?如果没有,我怎样才能让它这样做?这还是问题吗?
删除了文件特定信息的配置文件(有问题的文件除外):
# see "man logrotate" for details
# rotate log files weekly
weekly
# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be configured here
/home/username/.local/share/bot/bot.log {
compress
daily
nomail
rotate 14
prerotate
/home/username/botscripts/wbstop.sh
endscript
postrotate
/home/username/botscripts/wbstart.sh
endscript
}
如果有帮助的话,这是两个脚本。该程序需要几秒钟才能完全关闭,这就是它休眠的原因。wbstop.sh
:
#!/bin/sh
pkill -INT -f bot.py
sleep 8
wbstart.sh
:
#!/bin/sh
sleep 5
python3 /home/username/bot/bot.py &