Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为Rails应用程序设置logrotate_Ruby On Rails_Linux_Bash_Cron_Logrotate - Fatal编程技术网

Ruby on rails 为Rails应用程序设置logrotate

Ruby on rails 为Rails应用程序设置logrotate,ruby-on-rails,linux,bash,cron,logrotate,Ruby On Rails,Linux,Bash,Cron,Logrotate,几天来,我一直在网上搜索如何设置我的服务器以自动轮换我的团队最近发布的Rails应用程序的日志。我已经让自己能够运行sudologrotate-f/etc/logrotate.conf,但当然,谁愿意一直这样做呢 应用程序日志的配置文件的内容(我想添加更多,但当我无法旋转一个文件时,不需要添加): 我已经验证了/etc/logrotate.conf文件包含以下行: include /etc/logrotate.d 但这是我不太确定该去哪里的部分。我发现了许多不同的方法来实现过程的自动化,但似乎

几天来,我一直在网上搜索如何设置我的服务器以自动轮换我的团队最近发布的Rails应用程序的日志。我已经让自己能够运行
sudologrotate-f/etc/logrotate.conf
,但当然,谁愿意一直这样做呢

应用程序日志的配置文件的内容(我想添加更多,但当我无法旋转一个文件时,不需要添加):

我已经验证了
/etc/logrotate.conf
文件包含以下行:

include /etc/logrotate.d
但这是我不太确定该去哪里的部分。我发现了许多不同的方法来实现过程的自动化,但似乎都不管用。作为记录,我已经验证了服务器安装了
anacron
命令,但是我不知道如何为我自己的任何进程配置它。此外,root在服务器上还没有crontab(我们还不需要它),我不确定这是否比
/etc/crontab
更好。在
/etc/crontab
文件中,我添加了:

15 0 * * *   root    cd / && run-parts --report /etc/cron.daily
但我见过其他人用它

15 0 * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
后者是更好的选择吗?为什么?如果是,我如何确保它工作?同样,我不知道如何为手头的任务设置anacron

最后,这里是
/etc/cron.daily/logrotate
文件之前的内容:

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
  /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
经过一些研究,我用这个(我理解得更好一些)代替了它:

有人能告诉我第一个配置在做什么吗?这两个选项中哪一个更好?我不确定为什么我必须强制这个过程才能让它运行。也许
/etc/crontab
不像我想的那样工作

后者是更好的选择吗?为什么?

使用cron命令,
/etc/cron.daily/*
只有在午夜(00:15)计算机打开时才会运行。如果你像有些人那样在晚上关掉它,它就永远不会跑了

为了解决这个问题,我们可以使用anacron,而不是在当天晚些时候计算机启动时运行命令。这对于服务器来说显然不如台式机有用

当然,您不希望同时使用这两种方法,因为这会使作业一天运行两次。因此,cron是最脆弱的机制,只有在未安装anacron的情况下运行作业,它才会屈服于anacron

这是Debian和Ubuntu默认使用
test-x/usr/sbin/anacron | |
crontab作业前缀所做的


所有服务器发行版都将正确设置logrotate,因此您不应该修改crontab、anacrontab或
/etc/cron.daily/logrotate
。您应该做的唯一一件事是将文件添加到
/etc/logrotate.d

尝试将此文件放入/etc/crontab文件: -*/15****根测试-x/usr/lib/cron/run crons&&/usr/lib/cron/run crons>/dev/null 2>&1


这对我很有用。

谢谢你的解释!我真正头疼的是为什么这些圆木似乎从来没有被旋转过。在过去的几天里,我可能因为试图强迫旋转而把自己搞砸了。我不知道服务器是否需要超过24小时才能认为日志需要轮换,但由于crontab包含了您的
test-x/usr/sbin/anacron | |
命令,几天前日志没有轮换。我会让她坐几天不碰任何东西,看看它是否有效。。。
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
  /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf