定时任务cron表达式
作者:冥冰薇
提示:本篇文章约4116字符,阅读大约需要5分钟。
关注专栏不迷路
写在前面
之前在写Portainer教程的时候,有值友在评论区问我是否可以写一篇定时开关容器的文章。
诺,满足你。
注:以下内容不适用于群晖系统,其他基于Linux的NAS系统请自行测试。
定时启动容器(Linux)
在 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 任务的时间和日期字段,以及要运行的命令。
注意:这种方法假设你已经创建了 Portainer 容器,并且容器的名称是 “portainer”。如果你还没有创建容器,或者容器的名称不同,你需要先创建容器,或者在命令中使用正确的容器名称。
要获取 Docker 容器的名称,你可以使用 docker ps
命令来列出正在运行的容器,并查看容器的名称列。以下是获取容器名称的步骤:
第一步:打开终端。
输入以下命令来列出正在运行的容器:
docker ps
这将显示正在运行的容器的列表,包括容器的ID、名称、状态等信息。
在列表中找到你感兴趣的容器,查看容器名称所在的列。容器名称通常在最后一列,标有`NAMES。
例如:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\r\nabcdef123456 portainer "/portainer" 2 hours ago Up 2 hours 9000/tcp portainer
在这个示例中,容器名称为 “portainer”。
定时关闭任务同理,比如设置每天18点关闭portainer容器:
Portainer 容器,你可以添加以下行:
0 18 * * * /usr/bin/docker stop portainer
附:时间表达式
当你在 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表达式进行设置。
总结
今天我们不仅掌握了如何定时启动和关闭容器,也掌握了时间表达式。这在之后NAS的使用中,将使我们的操作变得更加自如。
下期预告:常用docker命令全总结。
这就是本期的全部内容了,如果这篇文章对你有帮助的话,欢迎你在评论区多多讨论,也欢迎关注、点赞、打赏一键三连,你的支持对我非常重要。
我是冥冰薇,点个关注不迷路,我们下期再见。
阅读更多NAS存储精彩内容,可前往什么值得买查看
","gnid":"99d89278fd36aed52","img_data":[{"flag":2,"img":[{"desc":"","height":"239","title":"","url":"https://p0.ssl.img.360kuai.com/t011ce8861b2638f945.jpg","width":"600"},{"desc":"","height":"140","title":"","url":"https://p0.ssl.img.360kuai.com/t017ccfa45e25018c85.jpg","width":"600"},{"desc":"","height":"312","title":"","url":"https://p0.ssl.img.360kuai.com/t01af78a17d37309fec.jpg","width":"600"},{"desc":"","height":"148","title":"","url":"https://p0.ssl.img.360kuai.com/t0179f6923b5c591c8f.jpg","width":"600"},{"desc":"","height":"130","title":"","url":"https://p0.ssl.img.360kuai.com/t01537205df543d872e.jpg","width":"574"},{"desc":"","height":"578","title":"","url":"https://p0.ssl.img.360kuai.com/t0175a269e15294acca.jpg","width":"600"},{"desc":"","height":"597","title":"","url":"https://p0.ssl.img.360kuai.com/t01d8a3ba7192c6bd29.jpg","width":"600"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1684837897000,"pure":"","rawurl":"http://zm.news.so.com/514010920fea7257c32185a4aac88e5c","redirect":0,"rptid":"691e03be15d17d6b","rss_ext":[],"s":"t","src":"什么值得买","tag":[],"title":"docker妙用 篇八:如何定时启动和停止docker容器
颜曲飘3834Spring+quartz 做定时任务时,每5分种执行一次,怎么写法 -
仲仪发17364116316 ______ <!-- 每天的24小时,每隔5分钟,获取邮件存库一次 --> <bean id="GetEmailJob" class="com.suitong.mp.modules.monitor.action.GetEmailJob"></bean> <!-- 调用工作对象和工作方法 --> <bean id="GetEmailTask" class="org....
颜曲飘3834spring定时器如何配置??? -
仲仪发17364116316 ______ 有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz.1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 import java.util.TimerTask; public class EmailReportTask extends TimerTask{ @Override public void run()...
颜曲飘3834在Web系统中,怎么实现一个定时任务 -
仲仪发17364116316 ______ 1.我们在Win7系统中点击开始按钮,依次选择打开“所有程序—附件—系统工具”,找到“任务计划程序”即可打开Win7系统的任务计划设置面板. 2.在Win7系统的“任务计划程序”设置面板中,我们点击菜单“操作—创建基本任务”.3. 输...
颜曲飘3834linux的定时执行 cron 写两个不同的时间执行如何写? -
仲仪发17364116316 ______ 0 12 * * 1-5 script.sh30 16 * * 1-5 script.sh 后面的script.sh改成你的脚本全路径应该就行了
颜曲飘3834springMVC中,如何定时回复一个请求呢? -
仲仪发17364116316 ______ 应该是浏览器的请求机制问题,因为浏览器不是软件客户端,它发起的请求一般都是期望立刻能得到回复然后会断开连接,浏览器不会保持一个长时间的与服务端的连接.你这里应该也是用ajax请求的吧?你可以尝试将timeout时间设置的长一点试试看,如果不行还是要超时的话就只能换别的方法了 现在还有有种分发技术,可以有服务端推送信息给浏览器客户端,具体的我也不清楚
颜曲飘3834Linux系统利用Crontab命令实现定时重启怎么做?
仲仪发17364116316 ______ Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序 使用cron服务,用 service crond status 查看 cron服务状态,如果没有启动则 service crond ...
颜曲飘3834如何用Spring实现集群环境下的定时任务 -
仲仪发17364116316 ______ 定时任务的实现方式有多种,例如JDK自带的Timer+TimerTask方式,Spring 3.0以后的调度任务(Scheduled Task),Quartz等.Timer+TimerTask是最基本的解决方案,但是比较远古了,这里不再讨论.Spring自带的Scheduled Task是一个轻量...
颜曲飘3834linux 定时任务的方法有哪些 -
仲仪发17364116316 ______ 如果我们需要定时执行一些周期性重复性的任务,我们就会用到定时执行任务功能来帮我们自动执行每天、每周等周期性重复性的任务而不需要人为干预即可实现. 我们通过crontab –e来创建自己的定时任务,下图中的5个*的含义是,第一个*...
颜曲飘3834ubuntu 16.04 怎么添加定时任务 -
仲仪发17364116316 ______ ubuntu 16.04 添加定时任务可以使用crontab命令.如下是这个crontab命令详解1)、命令格式:crontab [-u user][-e|-l|-r] 其中:-u user:用来设定某个用户的crontab服务,此参数一般由root用户来运行.如果不指定用户则表示当前登录用户的...
颜曲飘3834linux中,使用哪个命令去定时处理任务 -
仲仪发17364116316 ______ 如果必须使用命令的话,一般会可at命令. 定时任务,指定一个时间执行一个任务,只能执行一次. 语法:# at [参数] [时间] 输入要执行的任务命令后按Ctrl+d退出即可. 常见参数: -m :当指定的任务被完成之后,将给用户发送邮件,即使没有...