零基础学习Linux系统计划任务cron记录
计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。
在Linux中,我们经常用到 cron 服务器来完成这项工作。
cron服务器可以根据配置文件约定的时间来执行特定的任务。
at命令 – 一次性定时计划任务
at命令允许指定运行脚本时间,at的守护进程atd会以后台模式运行,检查系统上的一个特殊目录来获取at命令的提交的作业。
默认情况下,atd守护进程每60秒检查一次目录。
有作业时会检查作业运行时间,如果与当前时间匹配,则运行此作业。
语法格式:at [参数]
参数:
atq 查看系统中的等待作业
-d 删除系统中的等待作业(等效于atrm命令)
-c 打印任务的内容
-q 使用指定的列队
-f 将指定文件提交等待作业
-t 以时间的形式提交运行作业
查看系统中的等待作业
[root@study ~]# atq
使用”at -d”或者”atrm”(二者同效)指定id来删除系统中的等待作业,id为”atq”命令输出的第一行顺序数字
[root@study ~]# at -d 1
Cannot find jobid 1
立即执行at_test.sh脚本
[root@study ~]# at -f at_test.sh now
job 1 at Sat Nov 19 13:56:00 2022
在2分钟之后运行 at_test.sh脚本
[root@study ~]# at -f at_test.sh now+2 min
job 2 at Sat Nov 19 14:01:00 2022
在14:10运行 at_test.sh 脚本
[root@study ~]# at -f at_test.sh 14:05
job 3 at Sat Nov 19 14:05:00 2022
在2022年11月20日运行 at_test.sh脚本
[root@study ~]# at -f at_test.sh 11/20/2022
job 4 at Sun Nov 20 14:02:00 2022
crond 服务的启动和自启动
crontab命令 – 管理定时计划任务
crontab命令来自于英文词组“cron table”的缩写,其功能是管理定时计划任务。
定时计划任务,故名意思就计划好的任务,到了时间就会自动执行,在Linux系统中的crond是一个定时计划任务服务,
用户只要能够按照正确的格式(分、时、日、月、星期、命令)写入到配置文件中,
那么就会按照预定的周期时间自动的执行下去,而crontab命令则是用于配置的工具名称。
语法格式:crontab [参数]
参数:
-e 编辑任务
-l 列出任务
-r 删除任务
-u 指定用户名字
管理当前用户的计划任务
[root@study ~]# crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务
这个文件中是通过 5 个“”来确定命令或任务的执行时间的,这 5 个“”的具体含义如下表 所示。
项目 | 含义 | 范围 |
---|---|---|
第一个"*" | 一小时当中的第几分钟(minute) | 0~59 |
第二个"*" | 一天当中的第几小时(hour) | 0~23 |
第三个"*" | 一个月当中的第几天(day) | 1~31 |
第四个"*" | 一年当中的第几个月(month) | 1~12 |
第五个"*" | 一周当中的星期几(week) | 0~7(0和7都代表星期日) |
在时间表示中,还有一些特殊符号需要学习,如下表所示。
特殊符号 | 含义 |
---|---|
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次。比如"/10***命令",代表每隔 10 分钟就执行一次命令。 |
当“crontab -e”编辑完成之后,一旦保存退出,那么这个定时任务实际就会写入 /var/spool/cron/ 目录中,每个用户的定时任务用自己的用户名进行区分。而且 crontab 命令只要保存就会生效,只要 crond 服务是启动的。
crontab举例
时间 | 含义 |
---|---|
45 22 *** 命令 | 在 22 点 45 分执行命令 |
0 17 ** 1 命令 | 在每周一的 17 点 0 分执行命令 |
0 5 1,15** 命令 | 在每月 1 日和 15 日的凌晨 5 点 0 分执行命令 |
40 4 ** 1-5 命令 | 在每周一到周五的凌晨 4 点 40 分执行命令 |
*/10 4 *** 命令 | 在每天的凌晨 4 点,每隔 10 分钟执行一次命令 |
0 0 1,15 * 1 命令 | 在每月 1 日和 15 日,每周一个 0 点 0 分都会执行命令,注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆 |
案例:
让系统每隔 3 分钟就向 /tmp/test 文件中写入一行“hello world!”,验证一下系统定时任务是否会执行。
[root@study ~]# crontab -e
#进入编辑界面
*/3 * * * * /bin/echo "hello world!" >> /tmp/test
查看当前用户的已有计划任务列表
[root@study ~]# crontab -l
*/3 * * * * /bin/echo "hello world!" >> /tmp/test
删除当前用户下所有的定时任务。如果只想删除某个定时任务,则可以执行“crontab -e”命令进入编辑模式手工删除
[root@study ~]# crontab -r
[root@study ~]# crontab -l
no crontab for root