高山:“服务`crond'不存在”

时间:2019-10-27 08:27:32

标签: docker cron alpine

我正在尝试运行一个Node 15.13.0 Alpine Docker容器,该容器每15分钟运行一次脚本。根据{{​​3}},我应该能够在Dockerfile中添加一个RUN任务,以通过以下方式将crond作为服务运行:

rc-service crond start && rc-update add crond

这将返回错误:

rc-service: service `crond' does not exist

仅针对此Docker容器运行cron任务以运行单独的Docker容器是的选项。该容器已经非常轻巧,并且不能做很多事情。

这是我的Dockerfile:

FROM node:12.13.0-alpine

RUN apk add --no-cache tini openrc

WORKDIR /opt/app

COPY script.sh /etc/periodic/15min/

RUN chmod a+x /etc/periodic/15min/script.sh

RUN rc-service crond start && rc-update add crond

COPY . .

RUN chmod a+x startup.sh

ENTRYPOINT ["/sbin/tini", "--"]

CMD ["./startup.sh"]

这里的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

问题是某些Alpine Docker容器未安装busybox-initscripts package。安装此程序后,crond将作为服务运行。我遇到的另一个麻烦是run-parts,执行/etc/periodic文件夹中文件的命令期望没有扩展名,所以我删除了该扩展名,一切都可以正常工作了。

工作的Dockerfile看起来像这样:

FROM node:12.13.0-alpine

RUN apk upgrade --available

RUN apk add --no-cache tini openrc busybox-initscripts

WORKDIR /opt/app

COPY runScraper /etc/periodic/15min/

RUN chmod a+x /etc/periodic/15min/runScraper

COPY . .

RUN chmod a+x startup

ENTRYPOINT ["/sbin/tini", "--"]

CMD ["./startup"]

答案 1 :(得分:0)

自上一个解决方案发布以来,Alpine 可能已经改变了工作方式,现在它只是报告:

 # rc-service crond start
 * You are attempting to run an openrc service on a
 * system which openrc did not boot.
 * You may be inside a chroot or you may have used
 * another initialization system to boot this system.
 * In this situation, you will get unpredictable results!
 * If you really want to do this, issue the following command:
 * touch /run/openrc/softlevel
 * ERROR: syslog failed to start
 * ERROR: cannot start crond as syslog would not start

在安装自动激活它的“busybox-initscripts”期间静默失败。

重要的一点是:

touch /run/openrc/softlevel

这使它起作用,请注意,您仍然需要安装先前解决方案的其余部分,即“openrc”和“busybox-initscripts”。