定时启动和停止docker容器
在 Linux 系统下,你可以使用 cron 任务来定时启动 Docker 容器。以下是一个简单的步骤来设置定时启动 Portainer 容器:
第一步,打开终端;
第二步,输入 crontab -e
命令来编辑 cron 文件。如果这是你第一次运行这个命令,它可能会让你选择一个编辑器,例如 nano 或 vi;
强制使用nano编辑器的方法:
EDITOR=nano crontab -e
第三步,在打开的文件中,你可以添加一个新的 cron 任务。每个 cron 任务都有五个时间和日期字段,后面跟着要运行的命令。例如,如果你想要每天早上 6 点启动 Portainer 容器,你可以添加以下行:
0 6 * * * /usr/bin/docker start portainer
这行命令的意思是在每天的第 6 小时(即早上 6 点)执行 /usr/bin/docker start portainer
命令。
注意:你需要确保 Docker 的路径是正确的。你可以通过在终端中输入 which docker
来查看 Docker 的路径。
而群晖的docker路径就是:/usr/local/bin/docker
第四步:保存并关闭文件。在 nano 编辑器中,你可以通过按 Ctrl+X
,然后按 Y
,最后按 Enter
来保存并关闭文件。
第五步:你可以通过输入 crontab -l
命令来查看你的 cron 任务。
这样,你的 Portainer 容器就会在每天早上 6 点启动了。如果你需要在不同的时间启动容器,或者启动不同的容器,你可以修改 cron 任务的时间和日期字段,以及要运行的命令。
附:时间表达式
当你在 cron 任务中设置时间和日期字段时,它们控制了任务执行的时间。在这个特定的例子中,0 6 * * *
表示任务将在每天的第六个小时(早上6点)执行。
让我们来解释这个时间表达式的各个字段的含义:
-
第一个字段是分钟字段(Minutes):它表示一个小时中的哪一分钟执行任务。在这里,它是
0
,表示任务在每个小时的第 0 分钟执行。 -
第二个字段是小时字段(Hours):它表示一天中的哪个小时执行任务。在这里,它是
6
,表示任务在每天的第 6 个小时执行。 -
第三个字段是日期字段(Day of the month):它表示一个月中的哪一天执行任务。在这里,它是
*
,表示每天都执行任务。 -
第四个字段是月份字段(Month):它表示一年中的哪个月执行任务。在这里,它是
*
,表示每个月都执行任务。 -
第五个字段是星期字段(Day of the week):它表示一周中的哪一天执行任务。在这里,它是
*
,表示每一天都执行任务。
总结起来,0 6 * * *
表达式表示每天的第六个小时(早上6点)执行任务,无论是哪一天、哪一个月或是星期几。这就是为什么这个表达式被用来设置每天早上6点启动定时任务的含义。
以下为时间表达式的具体规范:
字段 | 是否必填 | 允许值 | 允许特殊字符 | 备注 |
---|---|---|---|---|
Seconds | 是 | 0–59 | *, - | 标准实现不支持此字段。 |
Minutes | 是 | 0–59 | *, - | |
Hours | 是 | 0–23 | *, - | |
Day of month | 是 | 1–31 | *, - ? L W | ? L W只有部分软件实现了。 |
Month | 是 | 1–12或JAN–DEC | *, - | |
Day of week | 是 | 0–7或SUN–SAT | *, - ? L # | ? L #只有部分软件实现了。 |
Year | 否 | 1970–2099 | *, - | 标准实现不支持此字段。 |
注:
-
L
:L
字符在时间表达式中表示月份或星期的最后一天。例如,7L
表示月份中的最后一个星期天,L-3
表示一个月中的倒数第三天。 -
W
:W
字符在时间表达式中表示最近的工作日(周一至周五)。它用于日期字段(Day of month)中。例如,15W
表示离指定日期最近的工作日。 -
#
:#
字符在时间表达式中用于指定月份中的第几个星期几。例如,2#3
表示月份中的第三个星期二。 -
?
:?
字符在时间表达式中用于指示日期字段(Day of month)或星期字段(Day of week)可以是任意值。它在某些情况下用于替代其他字段。例如,如果你想要在每月的第五个工作日执行任务,你可以使用?
代替星期字段,如? 5
。
这些特殊字符可以用于增加时间表达式的灵活性和精确度,以满足特定的需求。在实际使用中,它们的解释可能会因不同的调度器实现而有所差异,因此需要根据具体的调度器文档或工具来确认其准确的含义和用法。
cron表达式广泛应用于定时任务调度、自动化脚本、定时数据采集等方面。我们日常使用的青龙面板的定时任务即基于cron表达式进行设置。