Linux 计划任务
0.前提
一切命令输入输出效果基于CenOS7
1.计划任务的分类
定时任务:即日常任务,每隔一段周期就执行的事务。对应crontab
命令。突然任务:即临时决定需要做的,这次做完后基本没有下次。对应at
命令。crontab:将指定的工作或任务,例如脚本等,按照设定的周期循环执行
at:可以处理仅执行一次就结束的命令
2. at 命令
基础语法:at 时间
例如:
注意输入完第二行后按Enter
新启一行,在新一行按Ctrl+D
结束输出(自动转换位<EOT>
)
相关命令
atq #查询当前设置的at任务列表,首列为任务编号,也可用 at -l
atrm 任务编号 #删除指定任务编号的at任务
服务命令:
systemctl status atd #查看服务状态
systemctl enable atd #开机启动atd服务
systemctl disable atd #开机不启动atd服务
systemctl start atd #开启atd服务
systemctl stop atd #关闭atd服务
3. crontab 命令
crontab命令依赖crond服务。
crontab
按照指定的格式编辑定时任务保存在crontab
文件中,crond
服务会每分钟定期查看crontab
文件中的定时任务列表去执行任务。关系如下:
一般crond服务在安装系统的时候会被默认安装,并自动运行
systemctl status crond
如果无效则需要安装crond服务
crond安装:yum -y install crontabs
启动crond服务: systemctl start crond
crond设置开机自启动: systemctl enable crond
主要设置文件
全局配置文件,位于 /etc/crontab系统默认设置, 位于/etc/cron.*/用户自定义的设置,位于 /var/spool/cron/用户名
主要命令
举例,:设置每天的 19:30 都会定时重启一次apache服务。
crontab -e30 19 * * * root systemctl restart httpd
语法介绍:
编辑某个用户的 crontab 文件内容,如果不指定用户,则表示编辑当前用户的 crontab 文件
crontab -e [-u 用户名]
通过设置crontab文件中的这五个 * 来确定任务的执行时间的, user-name是执行任务的用户,command to be executed 是要执行的命令或者脚本任务,我们具体来看下这五个 * 所代表的含义。
* * * * * user-name command to be executed
时间数值的特殊表示方法
*
表示任意时间/
指定时间的间隔频率;*/10
=每隔十分钟(位于分字段);0-23/2
即每隔两小时-
代表从某个数字到某个数字:10-19
即10号到19号(日字段),
开几个离散的数字:5,10-15,20
即5号,10号到15号,20号(日字段)
cron 命令参数
命令基本格式:crontab [选项]
orcrontab [选项] file
crontab -l [-u 用户名] #查看。显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容crontab -r [-u 用户名] #删除。从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件crontab -e [-u 用户名]#编辑cron服务
一般删除所有任务才用 -r 。删除单条可以 -e 编辑时,删除对应任务即可
在crontab [选项] file 命令中, file 指的是命令文件的名字,表示将 file 作为 crontab 的任务列表文件并载入 crontab,若在命令行中未指定文件名,则此命令将接受标准输入(键盘)上键入的命令,并将它们键入 crontab, 例如:crontab -u test /root/jobs.txt ,表示用/root/jobs.txt 这个文件中的任务列表载入crontab。
cron任务失败常见问题
crond服务未启动,systemctl status crond 命令查看,systemctl start crond 启动服务脚本无权限。 chmod +x file ,chmod加上权限即可定时任务要执行的脚本中涉及文件路径时,一定要写全局路径,不能写相对路径。环境变量问题,定时任务要执行的脚本要用到java或其他环境变量时,需要通过source命令引入环境变量
常用cron
1、每小时的第30分钟执行 ls 命令30 * * * * ls2、每10分钟执行 ls 命令*/10 * * * * ls3、每天的 14:30 执行 ls 命令30 14 * * * ls4、每小时执行 ls 命令0 * * * * ls5、每天执行 ls 命令0 0 * * * ls6、每周执行 ls 命令0 0 * * 0 ls7、每年执行 ls 命令0 0 1 1 * ls8、每月 22号 的 6:22 执行 ls 命令22 6 22 * * ls9、每年的 6月22号 6:30 执行 ls 命令30 6 22 6 * ls10、每星期日的 6:30 执行 ls 命令30 6 * * 0 ls注意:0和7均可表示星期天, 1 表示星期一,以此类推;也可以用英文来表示,sun 表示星期天,mon 表示星期一等。11、每月 10号和20号 的 4:30 执行 ls 命令30 4 10,20 * * ls注意:" , " 用来连接多个不连续的时间12、每天 8~11点 的第 25 分钟执行 ls 命令25 8-11 * * * ls注意:" - " 用来连接连续的时间13、每个月中每隔 10天 的 5:30 执行 ls 命令30 5 */10 * * ls即:每月的 1、11、21、31日 在 5:30 执行一次 ls 命令14、每天 4:30 以 root 身份执行 /etc/cron.daily 目录中的所有可执行文件30 4 * * * root run-parts /etc/cron.daily
30 5 */10 * * ls
即:每月的 1、11、21、31日 在 5:30 执行一次 ls 命令
14、每天 4:30 以 root 身份执行 /etc/cron.daily 目录中的所有可执行文件
30 4 * * * root run-parts /etc/cron.daily
如果觉得《Linux 计划任务 定时任务 执行计划 crontab》对你有帮助,请点赞、收藏,并留下你的观点哦!