我在具有 96 GB 存储空间的 Linode 上托管 Ruby on Rails 应用程序。我的应用程序的所有图像都存储在亚马逊上,它们是从亚马逊获取的。因此,我的 linode 应该有至少 80 GB 的免费存储空间。
但是当应用程序的日志文件超过 200 Mb 时,我收到错误消息:
Errno::ENOSPC: No space left on device
Run Code Online (Sandbox Code Playgroud)
我的网站出现故障。
我使用文件/etc/logrotate.conf 中的以下代码每天为我的应用程序启用日志轮换:
path/to/application/log/*.log {
daily
missingok
rotate 1
compress
delaycompress
notifempty
copytruncate
}
Run Code Online (Sandbox Code Playgroud)
但是现在我开始每天两次相同的错误,所以我根据大小更改了配置设置:
path/to/application/log/*.log {
size 1M
missingok
rotate 1
compress
delaycompress
notifempty
copytruncate
}
Run Code Online (Sandbox Code Playgroud)
我还将 logrotate 文件从 /etc/cron.daily 移动到 /etc/cron.hourly 以便 logrotate cronjob 每小时运行一次,如果超过 1M 则轮换日志。我重新启动了apache。
但是当我在一小时后检查时,我的文件大小大于 1M。因此,logrotate cronjob 在每小时后都不起作用。当我使用以下命令强制轮换日志时:
sudo /usr/sbin/logrotate -f /etc/logrotate.conf
Run Code Online (Sandbox Code Playgroud)
然后日志文件被轮换并且文件大小减小。
我无法弄清楚为什么这个配置不起作用。 …