各种 Debian 软件包,包括logrotate和rsyslog,将它们自己的日志轮换定义放在/etc/logrotate.d/
覆盖这些定义的正确方法是什么?
如果我修改文件,我会在每次系统更新时收到警告,如果我(或其他人)给出错误答案,我可能会丢失更改;否则,如果我(或其他人)无法手动合并文件,则可能无法获得新日志文件的新上游定义。这两件事在过去几年中经常发生。
我尝试覆盖00_*或zz_*文件中的定义,但出现重复错误:
error: zz_mail:1 duplicate log entry for /var/log/mail.log
error: found error in /var/log/mail.log , skipping
Run Code Online (Sandbox Code Playgroud)
有没有干净的解决方案?我应该每天编写一个 cron 脚本来重新应用我对定义文件的更改吗?
编辑:为了更清楚,理想情况下我希望保留 99%rsyslog的日志轮换定义,并使用 APT 自动更新。除了 的单个定义之外,/var/log/mail.log我需要对其应用不同的轮换策略。
如果 Logrotate 允许重复定义,并且每个文件只使用第一个或最后一个,我的问题就解决了。如果它有一个override选项,将一个定义标记为故意覆盖前一个定义,那也可以解决它。
但是,唉,看来我需要用我自己的版本覆盖整个/etc/logrotate.d/rsyslog(和nginx,以及其他)。
我想知道是否有人同意用户等效于全局/opt目录,以便将作为 tarball 分发的第三方包解压为单个目录。示例包括 Firefox Beta、Tor 浏览器以及无数其他浏览器。
过去,我把它们放在任何我打开包装的地方,无论是在我的家里,在~/Downloads,还是在其他随机的地方,但现在我想把这些乱七八糟的东西整理一下。
我在想要么~/.local/opt要么~/.opt,但我想知道是否有任何我忽略的标准地方。
我在使用以下 (G)AWK 脚本时遇到问题:
do {
...
} while (system("sleep 10"))
Run Code Online (Sandbox Code Playgroud)
我的目的是在用户在睡眠期间按 ^C 时打破循环,但它不起作用。
我相信问题在于当被 ^C 中断时,Bash 以 0 退出,至少当它被 AWK 执行时system():
$ awk 'BEGIN { print "\n" system("sleep 2") }'
(let the sleep complete)
0
Run Code Online (Sandbox Code Playgroud)
$ awk 'BEGIN { print "\n" system("sleep 2") }'
^C
0
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
这是 Bash 或 (G)AWK 中的错误吗?
是否有一个不涉及复杂的 Bash 特定语法的简单解决方案,例如trap?
我能想到的最好的方法是:
do {
...
} while (42 == system("sleep 10 && exit 42"))
Run Code Online (Sandbox Code Playgroud)
对我来说,这仍然是一个杂七杂八的东西。
Readline 和 Bash 有一个非常有用的命令,称为operate-and-get-next,默认绑定到 Ctrl-O,该命令在从历史记录中选择当前行后执行当前行,并将历史记录指针前进一位,而不是清除命令行提示符,如 Enter会做。
因此,如果您希望以相同的顺序一一重复执行最近执行的多个连续命令,您可以:
Fish有没有类似的东西,或者可以将其实现为一个函数吗?