我正在使用一个 docker 镜像,其基本镜像是 bookworm-slim。 我认为该映像没有办法对启动服务进行排队(也许我也必须安装它?),但我想与我计划在 ENTRYPOINT 中执行的任何应用程序一起运行 CRON。
有没有一种更干净的方法可以在不使用 shell 脚本的情况下运行 cron 和入口点应用程序?
最精简的方法是什么?
有没有一种更干净的方法可以在不使用 shell 脚本的情况下运行 cron 和入口点应用程序?
如果您想要通用解决方案,则需要一个 shell 脚本作为您的
ENTRYPOINT
,它在后台运行 cron
,然后运行您的主要命令。比如:
#!/bin/sh
cron
exec "$@"
这假设您使用的是 Debian
cron
软件包中的 cron
,它会自动将自身置于后台。对于容器化 cron
守护进程来说,这可能不是最佳选择,因为它记录到 syslog 而不是 stdout(并且您没有在容器内运行 syslog 服务)。我经常使用 busybox 中的 crond,它具有用于记录到文件而不是系统日志的选项(并且“文件”可以包括 /dev/stdout
之类的内容),但 Debian busybox
软件包不包括 crond
。
请注意,在许多情况下,在单独的容器中运行
cron
比设置具有多个主进程的容器更有意义。这是否有意义实际上取决于您的特定用例。
您的
ENTRYPOINT
不一定是 shell 脚本;你可以用你最喜欢的编译语言编写一个小程序来完成同样的事情,并将其用作你的ENTRYPOINT
...但为此目的使用 shell 通常是最简单的解决方案。