高山图像中的 Crontab [重复]

Posted

技术标签:

【中文标题】高山图像中的 Crontab [重复]【英文标题】:Crontab in alpine image [duplicate] 【发布时间】:2021-10-15 07:39:23 【问题描述】:

我想在 alpine 映像中创建一个 cronjob,它将每 15 秒运行一次。 dockerfile 中的命令是

RUN echo "*/15 * * * * * /etc/init.d/aws-env-setup.sh" >> /var/spool/cron/crontabs/root

下面是图片启动后的文件。

# do daily/weekly/monthly maintenance
# min   hour    day month   weekday command
*/15    *   *   *   *   run-parts /etc/periodic/15min
0   *   *   *   *   run-parts /etc/periodic/hourly
0   2   *   *   *   run-parts /etc/periodic/daily
0   3   *   *   6   run-parts /etc/periodic/weekly
0   5   1   *   *   run-parts /etc/periodic/monthly
*/15 * * * * * /etc/init.d/aws-env-setup.sh

cronjob 没有运行。

如何在 alpine 容器中成功创建 cronjob。我的目标是在容器启动后 15 秒只运行一次 cronjob。 我想在 cron 下运行的 sh 文件的最后一行是 - crontab -r

【问题讨论】:

cron 运行了吗?请先提取minimal reproducible example,包括用于启动它的完整说明。另外,你如何确定它“没有运行”? tl;博士:cron does not provide sub-minute resolution. 【参考方案1】:

我对 cron 很恼火。它是如此标准,如此普遍,应该如此直截了当,但现实是,它往往只是一团糟。我自己说screw cron,基于这个helper让自己成为一个python服务

def cron(delay, task):

    # delay in seconds
    next_time = time.time() + delay

    while True:
      try:
          task()
      except Exception:
          traceback.print_exc()
          print(str(traceback.print_exc()))

      next_time += (time.time() - next_time) // delay * delay + delay
      time.sleep(max(0, next_time - time.time()))

将延迟设置为 15,你的任务是

cmd = "/etc/init.d/aws-env-setup.sh"
task = subprocess.call(cmd, shell=True)

并从中提供服务。你可以使用你的 linux 来处理它,但是由于你已经在 docker 内部工作了,你可以设置一个 docker restart 策略,让 docker 把它当作守护进程来处理。

【讨论】:

cron does not provide sub-minute resolution.

以上是关于高山图像中的 Crontab [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu使用crontab执行定时任务基础知识

Linux -定时任务调度

python-ldap 3.4 在高山图像上安装失败

在高山图像上构建lua-openssl时未定义引用`strerror_s'

Linux中的计划任务—Crontab调度重复执行的任务

crontab:macos中的“找不到ftp命令”错误[重复]