我有一个简单的 bash 脚本来执行logrotate
以下命令:
sudo logrotate -f /etc/logrotate.d/logfile
当我将 bash 脚本设置到 crontab 中时,该脚本没有执行,但是当我手动运行脚本时它可以运行。
这是 crontab 中的行:
* * * * * /home/plamen/test/demo.sh
我也在 cron 中尝试了以下操作,但仍然不起作用。
root /usr/sbin/logrotate /etc/logrotate.d/logfile
有任何想法吗?
答案1
中的文件/etc/logrotate.d/
由服务处理logrotate.service
,因此您根本不需要通过来旋转日志crontab
。
但是如果您现在想轮换一些日志,则需要使用选项--force
(或-f
):
logrotate --force /etc/logrotate.d/your-logrotate-conf
如您所知,在crontab
(在此计数由其触发的脚本内)必须使用完整路径,并且命令logrotate
必须以 root 身份(或由)执行sudo
,因此您可以将指令放在 root 的 crontab 中。您可以通过命令编辑它sudo crontab -e
,相关行应如下所示:
* * * * * /home/plamen/test/demo.sh >> /tmp/crontab.demo.sh.log 2>&1
在这种情况下,您不需要指定用户,root
因为这是其个人crontab
。
另一个选择是将指令放入/etc/crontab
系统范围crontab
(或者您可以创建专用文件/etc/cron.d/my-app-crontab
),您必须在其中指定用户:
* * * * * root /home/plamen/test/demo.sh >> /tmp/crontab.demo.sh.log 2>&1
笔记:上面的例子中添加了重定向>> /tmp/crontab.demo.sh.log 2>&1
,它将创建一个日志文件以便调试该过程。
答案2
这是工作,但是方式不同。
我在 /home/plamen/test/logrotate.conf 中创建了一个文件:
logrotate /home/plamen/test/logrotate.conf --state /home/plamen/test/logrotate-state --verbose
或者在 crontab 中:
logrotate /home/plamen/test/logrotate.conf --state /home/plamen/test/logrotate-state --verbose