我真的很难理解logrotate在我自己的 shell 文件中运行命令时是如何工作的,以及它是如何工作的。
有问题的命令是:
rclone -L -vv --log-file "/home/mike/tmp/qqq.log" sync "/media/mike/W10 D drive/My Documents/" remote:MyDocuments_M17A_from_Linux
Run Code Online (Sandbox Code Playgroud)
我想要什么:
我希望经常检查这个 qqq.log 文件,比如每 10 分钟一次,看看它是否超过了给定的大小,比如 1 MB。如果有,旋转文件。rclone使用该-vv选项会故意产生大量输出(即尝试理解让 logrotate 为这个用例工作)。
有一个适度有用的教程在这里,但它仍然让我在黑暗中:
您打算如何配置来自您自己的非系统进程的日志轮换?你的意思是在底部贴线/etc/logrotate.conf吗?这就是我所做的(在“#system-specific logs may be configured here”下):
/home/mike/tmp/qqq.log {
notifempty
size 1M
daily
create 0664 root root
rotate 3
}
Run Code Online (Sandbox Code Playgroud)
后来:我现在意识到您也可以放入单个文件/etc/logrotate.d- 没有太大的复杂性。
是不是默认情况下logrotate每天只运行一次,凭借文件/etc/cron.daily/logrotate?
这是否意味着如果我想要更频繁的检查,我可能应该设置一个cron作业来执行此操作,每 10 分钟运行一次(在本例中)?
你打算以logrotate <config file>root身份运行吗?我问这个问题是因为我以 root 和用户身份都尝试过。用户似乎没有工作。
指向此类设置的初学者指南的链接(这很常见)会有所帮助。我已经搜索过,但我发现的大部分内容都没有为您提供分步指南。
logrotate 可以作为普通用户运行,没有管理权限,为该用户轮换日志。
# Create a local per-user configuration file
cat >.logrotate.conf <<'X'
/home/mike/tmp/qqq.log {
notifempty
missingok
size 1M
rotate 3
}
X
# Run logrotate with that configuration file
/usr/sbin/logrotate -v -s .logrotate.state .logrotate.conf
Run Code Online (Sandbox Code Playgroud)
我删除了您的daily标准,因为您只想要基于大小的检查,这会将任何可能的操作限制为每天一次(每天第一次logrotate运行,因为它发生)。我已替换为create,missingok因此rclone创建输出文件而不是logrotate.
然后将logrotate命令放入用户的crontab文件中:
# Capture any existing crontab entries
crontab -l >.crontab
# Append ours to the list
echo '0 * * * * /usr/sbin/logrotate -s .logrotate.state .logrotate.conf >>.crontab.log 2>&1' >>.crontab
# Reload crontab
crontab .crontab
Run Code Online (Sandbox Code Playgroud)
使用此示例,命令的输出将写入.crontab.log,您可能希望logrotate每月循环或重置一个条目。