如何以非root用户身份运行cron作业并记录该作业的输出?

问题描述 投票:0回答:1

Docker best practices状态:

如果服务可以在没有特权的情况下运行,请使用USER更改为非root用户。

对于cron,这似乎不切实际,因为cron需要root特权才能正常运行。但是,cron运行的可执行文件不需要root特权。因此,我以cron用户身份运行root本身,但通过crontab以非root用户身份调用我的crontab -u <user>脚本以运行可执行文件(在这种情况下,是我编写的简单Python FTP下载脚本) ]命令。

cron / Docker的交互性和社区经验似乎仍处于起步阶段,但是有一些不错的解决方案。利用从thisthis优秀文章中收集的经验教训,我得出了一个看起来像这样的Dockerfile:

FROM python:3.7.4-alpine

RUN adduser -S riptusk331
WORKDIR /home/riptusk331

... boilerplate not necessary to post here ...

COPY mycron /etc/cron.d/mycron
RUN chmod 644 /etc/cron.d/mycron
RUN crontab -u riptusk331 /etc/cron.d/mycron

CMD ["crond", "-f", "-l", "0"]

[mycron文件只是每分钟运行的简单python执行

* * * * * /home/riptusk331/venv/bin/python3 /home/riptusk331/ftp.py

这很好,但是我不确定这里如何正确处理日志记录。我看不到/var/log/cron中保存的任何内容。我可以在终端上看到cronftp.py的输出,也可以在Kitematic中将其拉到容器日志中。但是我不知道这里到底发生了什么。

所以,我的第一个问题是:这里如何处理日志记录和输出(在cron作业之后没有任何重定向),并且此实现方法可以并且安全吗?] >>

VonC对this post的回答建议将> /proc/1/fd/1 2>/proc/1/fd/2附加到您的cron作业中,以将输出重定向到Docker的stdoutstderr。这是我俩都有些困惑,并且遇到麻烦的地方。

我的crontab文件现在看起来像这样

* * * * * /home/riptusk331/venv/bin/python3 /home/riptusk331/ftp.py > /proc/1/fd/1 2>/proc/1/fd/2
  1. 没有任何重定向的输出appeared

已经准备好输出到stdout / stderr,但是我不确定。我只知道它显示在我的终端上。那么为什么需要这种重定向?
  • 当我添加此重定向时,遇到权限问题。回想一下,该crontab被称为非root用户

  • riptusk331。因此,我没有超级用户访问权限,并收到以下错误:
    /bin/ash: can't create /proc/1/fd/1: Permission denied
    

    Docker最佳实践状态:如果服务可以在没有特权的情况下运行,请使用USER更改为非root用户。对于cron来说,这似乎不切实际,因为cron需要root特权才能...

    linux docker cron alpine
    1个回答
    2
    投票

    Alpine基本映像基于名为BusyBox的紧凑工具集,当您在此处运行crond时,得到的是BusyBox cron,而不是其他任何实现。它的documentation有点稀疏,但是如果您查看the crond source(在C语言中),则会发现在运行作业时根本没有任何重定向(请参阅的非发送邮件版本)。 start_one_job);作业的标准输出和标准错误是crond的标准输出和标准错误。在Docker中,由于crond是容器的主要进程,因此又成为了容器的输出流。


    0
    投票

    Alpine基本映像基于名为BusyBox的紧凑工具集,当您在此处运行crond时,得到的是BusyBox cron,而不是其他任何实现。它的documentation有点稀疏,但是如果您查看the crond source(在C语言中),则会发现在运行作业时根本没有任何重定向(请参阅的非发送邮件版本)。 start_one_job);作业的标准输出和标准错误是crond的标准输出和标准错误。在Docker中,由于crond是容器的主要进程,因此又成为了容器的输出流。

    © www.soinside.com 2019 - 2024. All rights reserved.