我有一个cron job,它的输出现在被重定向到一个文件中。它看起来像下面这样:
0 9 * * * /bin/sh /bin/cleanup.sh > /home/darkknight/cleanup.log
有人能帮我将其输出重定向到标准输出(stdout)吗?
运行的进程有一个 PID,其文件描述符(fd)映射到/proc/<PID>/fd
。我们可以在/var/run/crond.pid
中找到正在运行的cron进程的PID。
要将cron日志发送到stdout,我们可以将日志写入由cron启动的进程的fd号码1。
0 9 * * * /bin/sh /bin/cleanup.sh > /proc/$(cat /var/run/crond.pid)/fd/1 2>&1
cron -f
命令让 cron 在前台运行),因为我希望收集日志以进行监控和分析。根据“12 因素应用”原则——将日志视为事件流,因此我将 cron 日志重定向到标准输出。 - gaga5lalaprocid=1
:/proc/1/fd/1 2>&1
,因为进程1是输出到Docker日志的内容。 - Chris F Carrolltail -f $(/proc/$(cat /var/run/crond.pid)/fd/1)
,我会得到权限被拒绝的错误。 - P.Lorand>
来追加而不是覆盖是否足够?还是说它仍然会覆盖先前的日志?如果它会覆盖日志,你能否为其他人添加一个注释,说明需要在>>
和>
之间进行选择? - Zelphir Kaltstahl在任何终端上输入tty
,我们将获得该特定终端窗口的设备文件,例如/dev/pts/1
。 将cron作业重定向到此文件,如cleanup.sh > /dev/pts/1
cat /home/darkknight/cleanup.log
,你会在标准输出(STDOUT)中看到结果。如果你没有看到预期的输出,可能需要按照以下方式修改 cron 任务:
0 9 * * * /bin/sh /bin/cleanup.sh > /home/darkknight/cleanup.log 2>&1
这样可以获取 cleanup.sh
写入其标准错误输出(STDERR)的内容。
如果你不想丢失昨天的输出,可以按照以下方式进行修改:
0 9 * * * /bin/sh /bin/cleanup.sh >> /home/darkknight/cleanup.log 2>&1
或者,直接执行 /bin/sh /bin/cleanup.sh
命令,这样你就可以在终端上同时看到标准输出和标准错误输出的内容了。
cron
在 shell 的后台运行,所以您想将输出重定向到哪个stdout
? - Avihoo Mamka