我在docker容器中运行"cron".
每天都会执行一个脚本.
我想通过"docker logs"看到这个脚本的输出
PID 0的进程是我容器中的cron守护进程.入口点在前台启动cron:
/usr/sbin/crond -f
Run Code Online (Sandbox Code Playgroud)
我明白,我可以将脚本输出重定向到文件"path/to/logs"
07 2 * * * /data/docker/backup_webserver/backupscript.sh >> path/to/logs
Run Code Online (Sandbox Code Playgroud)
并按如下所示启动容器以查看日志
"tail -f path/to/logs"
Run Code Online (Sandbox Code Playgroud)
但是文件"path/to/logs"会在容器的运行时期间增长.
是否有可能从crontab直接登录到"docker logs"?
小智 12
使用默认的 cron 实用程序(busybox)
FROM alpine:3.7
# Setting up crontab
COPY crontab /tmp/crontab
RUN cat /tmp/crontab > /etc/crontabs/root
CMD ["crond", "-f", "-l", "2"]
Run Code Online (Sandbox Code Playgroud)
* * * * * echo "Crontab is working - watchdog 1"
Run Code Online (Sandbox Code Playgroud)
/proc/1/fd/1crontab 声明行内FROM centos:7
RUN yum -y install crontabs
ADD crontab /etc/cron.d/crontab
RUN chmod 0644 /etc/cron.d/crontab
RUN crontab /etc/cron.d/crontab
CMD ["crond", "-n"]
Run Code Online (Sandbox Code Playgroud)
* * * * * echo "Crontab is working - watchdog 1" > /proc/1/fd/1
Run Code Online (Sandbox Code Playgroud)
Tar*_*ani 11
将您的cron文件更改为以下
07 2 * * * /data/docker/backup_webserver/backupscript.sh > /dev/stdout
Run Code Online (Sandbox Code Playgroud)
这将确保日志转到容器输出
@mcfedr 是正确的,但我花了一段时间才理解它,因为它是一个带有变量的单行代码和一些与设置 cron 相关的额外代码。
这可能更容易阅读。它帮助我明确地写出来。
# Create custom stdout and stderr named pipes
mkfifo /tmp/stdout /tmp/stderr
chmod 0666 /tmp/stdout /tmp/stderr
# Have the main Docker process tail the files to produce stdout and stderr
# for the main process that Docker will actually show in docker logs.
tail -f /tmp/stdout &
tail -f /tmp/stderr >&2 &
# Run cron
cron -f
Run Code Online (Sandbox Code Playgroud)
然后,写入 cron 中的这些管道:
* * * * * /run.sh > /tmp/stdout 2> /tmp/stderr
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5874 次 |
| 最近记录: |