首页 >>  正文

定时任务cron表达式

来源:baiyundou.net   日期:2024-09-22

作者:冥冰薇

提示:本篇文章约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点启动定时任务的含义。

以下为时间表达式的具体规范:

字段是否必填允许值允许特殊字符备注
Seconds0–59*, -标准实现不支持此字段。
Minutes0–59*, -
Hours0–23*, -
Day of month1–31*, - ? L W? L W只有部分软件实现了。
Month1–12或JAN–DEC*, -
Day of week0–7或SUN–SAT*, - ? L #? L #只有部分软件实现了。
Year1970–2099*, -标准实现不支持此字段。

注:

  • LL 字符在时间表达式中表示月份或星期的最后一天。例如,7L 表示月份中的最后一个星期天,L-3 表示一个月中的倒数第三天。

  • WW 字符在时间表达式中表示最近的工作日(周一至周五)。它用于日期字段(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 :当指定的任务被完成之后,将给用户发送邮件,即使没有...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024