文章目录
前言
什么是计划任务?
一次性调度执行at
简介
服务启动
语法
参数:
示例
提交at作业
提交步骤
时间选择格式
示例
查看任务
示例
查看任务执行日志
示例
删除任务
示例
循环调度执行crontab命令
简介
查看服务(是否启动)
创建计划
编辑器中的语法格式
示例
代码中涉及到的任务信息解读
查询计划
删除计划
总结
前言
前面学习了Linux中的软件管理,这篇文章将开始学习Linux中的计划任务,通过本篇文章将学习Linux中的一次性调度执行at命令和循环调度执行cron命令的介绍与使用,下面开始我们的Linux计划任务的学学习吧。
什么是计划任务?
划任务是系统的常见功能,利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行。任务计划在每次系统启动的时候启动并在后台运行。当我们需要在服务器上定时执行一些重复性的事件时使用的,可以通过计划任务程序来运行准备好的脚本、批处理文件夹、程序或命令,在某个特定的时间运行,目前最主要的用途是定期备份数据。。
一次性调度执行at
简介
有些场景我们只是需要执行一次,执行完就结束任务我们使用at命令来操作,任务的执行日志以邮件的形式反馈给电脑。
服务启动
默认情况下所有的linux系统都提供此项功能。在redhat中atd是默认随系统启动而启动。
[root@localhost ~]# ps -ef |grep atdroot 12841 0 06:25 ? 00:00:00 /usr/sbin/atd -froot12970 12205 0 10:51 pts/0 00:00:00 grep --color=auto atd您在 /var/spool/mail/root 中有新邮件[root@localhost ~]# systemctl status atd.service● atd.service - Job spooling toolsLoaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)Active: active (running) since 三 -11-02 15:48:16 CST; 4 days agoMain PID: 1284 (atd)Tasks: 1CGroup: /system.slice/atd.service└─1284 /usr/sbin/atd -f11月 02 15:48:16 localhost.localdomain systemd[1]: Started Job spooling tools.11月 07 10:40:00 localhost.localdomain atd[12686]: Starting job 1 (a0000101a82400)...)11月 07 10:44:00 localhost.localdomain atd[12858]: Starting job 2 (a0000201a82404)...)Hint: Some lines were ellipsized, use -l to show in full.
语法
at -参数 <TIMESPEC>
参数:
-m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出-I atq的别名-d atrm的别名-v 显示任务将被执行的时间-c 打印任务的内容到标准输出-V 显示版本信息-q<列队> 使用指定的列队-f<文件> 从指定文件读入任务而不是从标准输入读入-t<时间参数> 以时间参数的形式提交要运行的任务
示例
[root@localhost ~]# at -vGarbled time[root@localhost ~]# at -Vat version 3.1.13
提交at作业
提交步骤
输入at命令同时指定作业执行的时间 ,按下Enter键;在at命令提示符“at >”下,输入命令或者shell脚本Ctrl+D 提交at作业。注意:如果如要执行多行命令,输入完一条命令,回车接着输入下一条,直到按Ctrl+D提交任务。
时间选择格式
now +5min //现在的时间加5分钟
时间 tomorrow (teatime is 16:00) //明天某时间执行
5pm august 3 2029 //2029年八月3日下午5点执行
4:00 -11-27 //11月27日4点执行
示例
[root@localhost ~]# date 11月 07日 星期一 11:00:00 CST[root@localhost ~]# at now +5minat> lsat> <EOT>job 3 at Mon Nov 7 11:05:00 [root@localhost ~]# at teatime tomorrowat> ls /testat> <EOT>job 4 at Tue Nov 8 16:00:00 [root@localhost ~]# at 8:00 tomorrowat> ls /testat> <EOT>job 5 at Tue Nov 8 08:00:00 at> useradd sureat> <EOT>job 6 at Thu Aug 3 17:00:00 [root@localhost ~]# at 5:20 -5-20at> touch /test/love.txtat> echo "I Love You">> /test/love.txtat> <EOT>job 8 at Sat May 20 05:20:00
查看任务
命令:atq
示例
[root@localhost ~]# date 11月 07日 星期一 11:08:25 CST[root@localhost ~]# atq4Tue Nov 8 16:00:00 a root5Tue Nov 8 08:00:00 a root6Thu Aug 3 17:00:00 a root8Sat May 20 05:20:00 a root
时间已经过了11:05,所以3号任务已经被执行了,在计划列表内找不到了。
查看任务执行日志
任务执行日志以邮件的形式存在,位置在/var/spool/mail/root。
通过mali查看
示例
[root@localhost ~]# mailHeirloom Mail version 12.5 7/5/10. Type ? for help."/var/spool/mail/root": 3 messages> 1 root Mon Nov 7 10:40 15/514 "Output from your job "2 root Mon Nov 7 10:44 24/601 "Output from your job "3 root Mon Nov 7 11:05 15/516 "Output from your job "& 2Message 2:From root@localhost.localdomain Mon Nov 7 10:44:01 Return-Path: <root@localhost.localdomain>X-Original-To: rootDelivered-To: root@localhost.localdomainSubject: Output from your job 2To: root@localhost.localdomainDate: Mon, 7 Nov 10:44:01 +0800 (CST)From: root@localhost.localdomain (root)Status: ROanaconda-ks.cfginitial-setup-ks.cfg公共模板视频图片文档下载音乐桌面& qHeld 3 messages in /var/spool/mail/root
删除任务
命令:atrm 任务号或者atrm文件名
或者使用atrm的别名:at -d
示例
[root@localhost ~]# atq4Tue Nov 8 16:00:00 a root5Tue Nov 8 08:00:00 a root6Thu Aug 3 17:00:00 a root8Sat May 20 05:20:00 a root[root@localhost ~]# atrm 4[root@localhost ~]# atq5Tue Nov 8 08:00:00 a root6Thu Aug 3 17:00:00 a root8Sat May 20 05:20:00 a root
4号任务已经被删除 。
循环调度执行crontab命令
简介
cron的概念和crontab是不可分割的;
crontab是一个命令,常见于Unix和Linux的操作系统之中;
用于设置周期性被执行的指令;
该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
计划任务存储位置:/var/spool/cron/
查看服务(是否启动)
[root@localhost ~]# ps -ef |grep cronroot 12881 0 06:25 ? 00:00:00 /usr/sbin/crond -nroot16413 12205 0 11:23 pts/0 00:00:00 grep --color=auto cron[root@localhost ~]# systemctl status crond.service● crond.service - Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)Active: active (running) since 三 -11-02 15:48:16 CST; 4 days agoMain PID: 1288 (crond)Tasks: 1CGroup: /system.slice/crond.service└─1288 /usr/sbin/crond -n11月 02 15:48:16 localhost.localdomain systemd[1]: Started Command Scheduler.11月 02 15:48:16 localhost.localdomain crond[1288]: (CRON) INFO (RANDOM_DELAY will...)11月 02 15:48:18 localhost.localdomain crond[1288]: (CRON) INFO (running with inot...)Hint: Some lines were ellipsized, use -l to show in full.
如果服务没启动就用命令systemctl start 需要启动的服务名 即可,cron程序运行是计划任务执行的根本。
创建计划
命令:crontab -e //编辑当前用户的,除了自身用户和root能查到,其他用户查不到。
编辑器中的语法格式
* * * * * (代表时间)command
分 时 日 月 周
min范围:1---59
hours范围:1---23
day范围:1---31
month范围:1---12
week范围:0---6(Sunday=0)
分 时 日 月 周 命令或脚本程序
留个部分用空格隔开,*表示站位符就算那里没有需要设置的内容也需要有*。
示例
[root@localhost ~]# crontab -e*/5 * * * * echo "hello ">> /test/hello.txt0 2 1,4,6 * * ls /0 2 5-9 * * ls /0 * * * * ls /0 2 * * * ls /0 2 14 * * ls /20 5 20 5 * echo "i love you" >> /test/love.txt0 2 * * 5 ls /0 2 2 6 5 ls /
代码中涉及到的任务信息解读
*/5 * * * * echo "hello ">> /test/hello.txt //每五分钟执行一次
0 2 1,4,6 * * ls / //每月的1日,4日,6日的2:00执行一次
0 2 5-9 * * ls / //每月的5日到9日的2:00执行一次
0 * * * * ls / //每小时的第0分钟执行一次
0 2 * * * ls / //每天的2:00执行一次
0 2 14 * * ls / //每月的14号的2:00执行一次
20 5 20 5 * echo "i love you" >> /test/love.txt //每年的5月20日的5:20执行一次
0 2 * * 5 ls / //每月的周五的2:00执行一次
0 2 2 6 5 ls / //每年的6月2日的2:00和每年6月周五的2:00都执行一次
查询计划
命令:crontab -l
管理员可以使用 -u username,去管理其他用户的计划任务
查看计划执行日志命令:mail
[root@localhost ~]# crontab -l*/5 * * * * echo "hello ">> /test/hello.txt0 2 1,4,6 * * ls /0 2 5-9 * * ls /0 * * * * ls /0 2 * * * ls /0 2 14 * * ls /20 5 20 5 * echo "i love you" >> /test/love.txt0 2 * * 5 ls /0 2 2 6 5 ls /您在 /var/spool/mail/root 中有邮件
每五分钟就会自动将hello写入到hello.txt中,说明任务计划设置成功,一般我们在生产环境中会用循环执行任务的操作用作备份。
删除计划
命令:crontab -r 删除当前用户的计划。
[root@localhost ~]# crontab -r[root@localhost ~]# crontab -lno crontab for root
总结
在备份数据的时候我们通常使用crontab命令,当只需要在指定时间仅需要执行一次就结束的时候我们使用at命令完成,本篇文章我们了解了Linux中的任务计划管理,学会使用at和crontab命令以及他们的应用场景。
创作不易,动动小手给个点赞加关注吧,有什么意见评论区告诉我,一起学习。