高山:“服务‘crond’不存在”

Cla*_*ent 3 cron docker alpine-linux

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

rc-service crond start && rc-update add crond
Run Code Online (Sandbox Code Playgroud)

然而,这会返回一个错误:

rc-service: service `crond' does not exist
Run Code Online (Sandbox Code Playgroud)

运行一个单独的 Docker 容器只是为了针对这个 Docker 容器运行 cron 任务不是一种选择。这个容器已经非常轻量级了,并没有做太多事情。

这是我的 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"]
Run Code Online (Sandbox Code Playgroud)

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

Cla*_*ent 5

问题是一些 Alpine Docker 容器没有安装busybox-initscripts 包。安装后,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"]
Run Code Online (Sandbox Code Playgroud)