首页 >>  正文

crontab设置定时任务

来源: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容器

政东祁2158请你描述下crontab的作用和语法,以及书写定时任务注意的要点. -
牧杨栏15044243071 ______ 设置crontab后我们可以使得Linux主动执行的在固定的间隔时间,执行指定的系统指令或 shell script脚本.生产环境可以用来日志分析或生产备份等. 语法格式: crontab [ -u user ] file ===》-u的意思就是指定用户 crontab [ -u user ] { -l 显示文件内...

政东祁2158使用crontab,定时执行一个python脚本,怎么不能用 -
牧杨栏15044243071 ______ 注意两点:1. crontab 不会有你设的环境变量2. crontab 要用绝对路径 正确做法写一个shell脚本,在脚本内设置环境变量及执行python语句,然后crontab执行该脚本.123 #/usr/bin/bash PATH=/home//Python-3.3.3:/home//Python-3.3.3/bin:$PATH python /home/xxx.py

政东祁2158linux定时任务crontab怎么启动 -
牧杨栏15044243071 ______ crontab 需要由root用户部署,“su - " 切换到root; ”crontab -e" 进入crontab 编辑状态; 输入" * * * * * /usr/bin/bash /home/ganlin/ganlin.sh", 这代表每秒执行一次脚本. 部署完成后 输入 ”crontab -l" 查看crontab 中所有部署的内容; 脚本最好不要放在/home目录下,可以在脚本中写入一行标准输出用来在部署完成后测试结果用. “> /dev/null 2>&1“ 这样写得结果是就看不到标准输出了, /dev/null 代表一个虚拟的设备 把标准输出写到一个不存在的设备中去了.

政东祁2158我想在linux用c搞个 定时程序然后可以指定时间运行程序.时间是小时和分钟的.主要是分钟要可以累加.比如 -
牧杨栏15044243071 ______ crontab -e ,然后,输入 * */1 * * * 这个是每隔一个小时,执行一次...楼主需要的情况,at,crontab 都是无法完全满足的,因为,crontab 每次执行,只能是每隔一段时间(但是间隔时间都是相同的),或者在某个时刻,楼主这种,情况很特殊,估计,需要,编写c 程序,才可以搞定的...

政东祁2158LINUX系统时间怎么设置同步脚本或命令 -
牧杨栏15044243071 ______ 使用crontab定时任务crontab-e进入编辑基本格式:*****command分时日月周命令第1列表示分钟1~59每分钟用*或者*/1表示第2列表示小时1~23(0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星期0~6(0表示星期天)第6列要运行...

政东祁2158主机的定时提供试行任务的功能怎么设置?
牧杨栏15044243071 ______ 美国服务器IXWebHosting主机和其它大多数主机一样也提供定时执行任务的功能,即Cron Jobs功能.那么什么是Cron Jobs呢?Cron Jobs又有哪些作用呢?Cron是一个守护程式,用于在指定的时间内执行固定行程类的任务,在Linux系统上每...

政东祁2158linux 怎么定crontab -
牧杨栏15044243071 ______ 1.作用 使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的时间执行,该命令使用权限是所有用户.2.格式 crontab [-u user] {-l | -r | -e}3.主要参数-e:执行文字编辑器来设定时程表,内空的文字编辑器是vi-r:删除目前...

政东祁2158linux 脚本编程 定时关闭和打开程序 -
牧杨栏15044243071 ______ 1、利用crontab 制定定时任务2、编写定时关闭和打开程序的脚本或命令3、crontab的用法 第1列分钟1~59 第2列小时1~23(0表示子夜) 第3列日1~31 第4列月1~12 第5列星期0~6(0表示星期天) 第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令或脚本30 21 * * * /usr/local/apache/bin/apachectl restart 上面的例子表示每晚的21:30重启apache

政东祁2158如何实现一个定时任务来对数据库中的数据进行操作 -
牧杨栏15044243071 ______ 写个脚本 用crontab设置每小时执行一次,sql语句如下:delete from tbname order by search_time desc limit 11,1000 如果数据超过1000可以再大点.

政东祁2158crontab修改后需要重启吗 -
牧杨栏15044243071 ______ 不需要. crontab -l 列出当前登录用户所有定时任务 crontab -l -u XXX 列出XXX用户的所有定时任务,如有没有会提示 no crontab for XXX crontab -e 编辑当前用户的定时任务 crontab -r 删除当前用户的定时任务 查看crontab的执行情况: tail -f ...

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