Linux计划任务详解
来源:互联网 发布:php技术文档 编辑:程序博客网 时间:2024/06/06 19:21
一、仅执行一次的工作调度
1. at命令介绍
语法:at [OPTION]... TIME
常用选项:
- -l:查看作业队列,相当于atq;
- f /PATN/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互输入;
- -d:删除指定的作业,相当于atrm;
- -q QUEUE:指明队列
设置任务运行时间的格式:
- HH:MM [[CC]YY-mm-dd]
- noon, midnight , teatime (4pm)
- now+#{ min | hours | days | weeks }
使用交互式方式创建一个任务:
[root@localhost ~]# at now+10minat> ls /etcat> <EOT> #Ctrl+d结束输入job 8 at Sun Apr 23 21:53:00 2017
使用指定文件作为输入:
[root@localhost ~]# at -f ~/scripts/sleep500s.sh now+10min job 9 at Sun Apr 23 21:58:00 2017
查看任务队列:
[root@localhost ~]# at -l8 Sun Apr 23 21:53:00 2017 a root9 Sun Apr 23 21:58:00 2017 a root[root@localhost ~]# atq8 Sun Apr 23 21:53:00 2017 a root9 Sun Apr 23 21:58:00 2017 a root
删除指定任务:
[root@localhost ~]# at -d 8[root@localhost ~]# atrm 9
2. batch命令介绍
batch命令其实是一个脚本文件。batch会让系统自行选择在系统资源较空闲的时间去执行指定的任务,其用法也很简单,没有任何参数。使用如下:
[root@localhost ~]# batch at> ls /etcat> <EOT>job 12 at Sun Apr 23 21:58:00 2017
二、周期性任务计划
1. crond守护进程的启用
有时候,我们需要系统执行一些周期性的任务,比如说,定期备份、定期清理临时文件等操作。Linux系统通过crond服务实现这一功能。CentOS上crond守护进程默认是有安装并开启了的。CentOS 5、6上可以使用 service crond status
查看crond是否正在运行,CentOS 7上可以使用 systemctl status crond.service
查看。
2. crond如何保存计划任务
crond需要使用/etc/crontab主配置文件和/etc/cron.d目录下的子配置文件来保存周期性任务,为了确保配置文件的格式不发生错误,要使用crontab命令编辑配置文件。
cron周期性任务分为系统级周期性任务和用户周期性任务。系统级周期性任务记录在/etc/crontab主配置文件和/etc/cron.d目录下的子配置文件中;用户周期性任务记录在/var/spool/cron目录下以各用户名命名的文件中。
3. cron周期性任务服务相关的配置文件
(1) /etc/cron.allow和/etc/cron.deny
/etc/cron.allow,存放被允许使用cron周期性任务的用户名单;/etc/cron.deny,存放不被允许使用cron周期性任务的用户名单。两个文件的格式都是将用户名填入文件中,每个用户名占一行。两个文件只生效一个,若/etc/cron.allow存在,生效之;否则,生效/etc/cron.deny。
(2) /etc/crontab文件 和 /etc/cron.d目录
/etc/crontab:
该文件是系统级cron任务的配置文件,主要用于实现系统自身的周期性自动维护。其配置文件的格式如下:
[root@localhost ~]# cat /etc/crontab SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed
其中的SHELL定义了周期性任务使用的解释器;PATH为重新定义的命令路径环境变量;MAILTO定义了任务执行后的结果发送给哪个用户的邮箱。
在/etc/crontab文件中,每一行定义一个周期性任务,每行的各字段定义如下:
- * * * * *:五个星号,分别代表分钟、小时、天、月、星期,用于设定周期性任务的执行周期。当系统实现与这里设定的时间吻合时,该行周期性任务被执行。
- user-name:指定使用哪个用户身份执行该周期性任务。
- command to be executed:要执行的命令。
周期性任务时间的设定方式如下:
使用示例:
/etc/corn.d目录:
为了方便管理系统级周期性任务,除了/etc/crontab文件作为配置系统级周期性任务的主配置文件外,我们还可以/etc/cron.d目录下创建多个子配置文件,分类的存放系统级周期性任务。子配置文件的格式和主配置文件格式相同。
我们可以根据周期任务的执行周期,或为哪些应用程序服务,进行分类,如下。
[root@localhost ~]# ls /etc/cron.d0hourly raid-check sysstat unbound-anchor
(4) /etc/cron.hourly目录、/etc/cron.daily目录、/etc/cron.weekly目录和/etc/cron.monthly目录
/etc/cron.hourly目录、/etc/cron.daily目录和/etc/cron.monthly目录分别用于存放执行周期为小时、天、月的可执行文件,例如可执行脚本文件。我们在周期性任务配置文件中配置一行周期性任务 run-parts <directory>
,便能执行多个周期相同的任务了。(注:run-parts命令的使用在下一小节有加以介绍)
如/etc/cron.d/0hourly文件中,便以小时为周期执行/etc/hourly目录下的可执行文件,如下:
[root@localhost ~]# cat /etc/cron.d/0hourly # Run the hourly jobsSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root01 * * * * root run-parts /etc/cron.hourly
(5) /var/spool/cron目录下以用户名命名的文件
每个用户定义的周期性任务,都存放在/var/spool/cron目录下以自己的名字命名的文件中。文件内容的格式与系统级周期性任务的配置文件/etc/crontab相似,但少了user-name字段,即格式示例如下:
[root@localhost ~]# cat /var/spool/cron/Kamin * 19 * * * ls /
3. crontab命令提交用户周期性任务
通过对/var/spool/cron目录下配置文件的修改,来提交周期性任务。但为了避免使用vim编辑器编辑时,语法错误使得周期性任务无法执行,我们必须使用专用的、带有语法检查的工具crontab来提交任务。
语法:crontab [-u user] [-l | -r | -e] [-i] [-s]
选项:
- -u user:操作指定用户的周期性任务,只有root可以使用。
- -l:列出用户的周期性任务。
- -e:编辑用户的周期性任务配置文件。
- -r:清空用户的周期性任务。
- -i:在清空用户周期性任务时进行交互式的提醒。
三、run-parts的使用
run-parts命令其实是安装crond服务时生成的脚本文件,其作用是执行指定目录下的所有可执行文件,用法如下:
格式:run-parts [--list|--test]<directory>
选项:
- –list:列出指定目录下的所有文件,不包括子目录下的文件。
- –test:列出指定目录下的所有可执行文件,不包括子目录下的文件。
run-parts的使用示例:
列出/etc目录下的所有文件:
[root@localhost ~]# run-parts --list /etc/etc/DIR_COLORS/etc/DIR_COLORS.256color...省略更多信息...
列出/etc目录下的所有可执行文件:
[root@localhost ~]# run-parts --test /etc/etc/auto.net/etc/auto.smb
执行./scripts目录下的所有文件(脚本test1.sh和test2.sh):
[root@localhost ~]# run-parts ./scripts/./scripts/test1.sh:This is a test scripts../scripts/test2.sh:This is test2.sh
- linux计划任务详解
- Linux计划任务详解
- Linux计划任务入门详解
- linux 计划任务入门详解
- Linux计划任务入门详解
- Linux计划任务入门详解
- CNETOS LINUX 计划任务详解
- linux crontab 计划任务详解
- Linux计划任务工具cron用法详解
- Linux Crontab 计划任务 命令详解
- Linux Crontab 计划任务 命令详解
- Linux计划任务工具cron用法详解
- Linux计划任务Crontab实例详解
- Linux计划任务工具cron用法详解
- Linux计划任务Crontab实例详解教程
- Linux中的cron计划任务配置详解
- Linux利用crontab创建计划任务详解
- Ubuntu 计划任务详解
- 微信实验十一、ThinkPHP5.0登录、验证及源码下载
- [LeetCode] Jump Game 跳跃游戏
- 【Micro Server】学习“微服务”过程中提的一些问题
- 170423_巴斯卡三角形
- Andrew Ng机器学习week5(Neural Networks: Learning)编程习题
- Linux计划任务详解
- 有趣的题目(进制转换)
- 监督学习和非监督学习的区别
- LeetCode之Maximum Subarray
- 学习笔记-01背包、完全背包、多重背包
- HDU——1001
- 搜索之城堡问题
- lnux定时运行命令
- BZOJ3242: [Noi2013]快餐店