Linux 学习笔记(16)

十六、 计划任务
在很多时候为了自动化管理系统,我们都会用到计划任务,比如关机,管理,备份之类的操作,我
们都可以使用计划任务来完成,这样可以是管理员的工作量大大降低,而且可靠度更好。
linux 系统支持一些能够自动执行任务的服务,我们称为计划任务。
LINUX 有如下三种计划任务:
at:指定一个时间执行一个任务 (适用一个或多个任务,执行一次后就不用)
cron:根据一个时间表自动执行任务 (使用一个或多个任务,周期性执行)
系统级别的计划任务及其扩展 anacron:在一个指定时间间隔错过后自动执行任务
1 at: 安排一个任务在未来执行,需要一个 atd 的系统后台进程
检查 atd 进程是否启动

root@centos61 桌面 \]# service atd status atd (pid 2274) 正在运行 ... \[root@centos61 桌面 \]# chkconfig \|grep atd atd 0: 关闭 1: 关闭 2: 关闭 3: 启用 4: 启用 5: 启用 6: 关闭 如果未启动,可以使用如下命令: \[root@centos61 桌面 \]# service atd start 正在启动 atd : \[ 确定

root@centos61 桌面 \]# chkconfig atd on **常用指令: at:安排延时任务** 具体使用方法: **例 1:** #at now+2 minutes 回车 \>输入要执行的命令 \>ctrl+d 结束输入 \[root@test \~\]# at now+2 minutes at\> wall Aixi at\> \ job 2 at 2010-06-18 16:36 \是 ctrl+d 中断输入,这个命令意思是发送一个广播内容是 Hello Aixi.具体时间可以改,单位可以改,可以用 hours,months,years,weeks 等. **例 2 我们还可以跟具体时间** \[root@test \~\]# at 16:39 dec 10 at\> Hello Aixi at\> \ ctrl+d 结束输入 job 3 at 2010-12-10 16:39 意思是在今年的 12 月 10 日 16:39 运行这个命令.如果不加月和日,默认就是今天. **Atq:查询当前的等待任务** 用 atq 来查询,已经运行的任务,就消失了。这就是 at 计划任务的重点,只运行一次 **atrm:删除等待任务** 启动计划任务后,如果不想启动设定好的计划任务可以使用 atrm 命令删除。 格式:atrm 任务号 命令后面跟计划任务编号,如果不跟,就会删除这个用户所有的计划任务。 例 3 atrm 10 //删除计划任务 10 atq //查看计划任务是否删除 **at 将要运行的命令以文本形式写入/var/spool/at/目录内,等待 atd 服务的取用和执行。** 还可以进入到/var/spool/at 目录里把计划任务删除,计划任务的文件都保存在该目录里,可以用 rm -f 文件名来删除(以文件的形式删除计划任务,因为计划任务是以文件形式保存在该目录中) 例 4: #cd /var/spool/at //进入到/var/spool/at 目录中 ls //显示目录中所有文件 rm -f a0000b0138b19c //删除计划任务 在通常情况下,超级用户都可以使用这个命令。对于其他用户来说,能否可以使用就取决于两个文 件:/etc/at.allow 和/etc/at.deny。 at 命令是可以基于用户来控制的,我们可以明确指定哪些用户可以使用 at 计划任务,哪些用户不可以使用 at 计划任务。 at 的控制文件 /etc/at.allow /etc/at.deny 系统默认是有 at.deny 文件,如果某个用户名在这个文件里,他就不能使用 at 计划任务。如果有 at.allow 文件,allow 文件先行,检查了 allow 明确允许,就不会检查 deny。 如果你要让哪个用户不能使用计划任务,就直接把他的用户名写进去就可以了,一排只能写一个。 **2** **、** **cron** **服务** **(** **参考网址:** **http://www.linuxsir.org/main/?q=node/209)** 相对与 at,cron 的优点就是能够周期性的执行某个命令,at 却只能执行一次,cron 的后台进程名字 是 crond ,cron 也是 system V 的服务,所以我们可以 service crond start\|stop 来启动和关闭此服 务,也可以使用 chkconfig 或者 ntsysv 来选择 cron 服务的默认开启,这些命令在以前我们都讲过的 命令: #crontab -e 编辑当前用户的 cron 表 #crontab -l 查看当前用户的 cron 表 #crontab -r 删除当前用户的 cron 进程 #crontab -u 用户名 以某用户的身份来控制 cron 表 还有个重要的知识点,就是当用户的计划任务建立后是存放在 var/spool/cron 这个目录 当使用 crontab -e 编辑当前用户的 cron 表后,会出现一个 vi 文件,cron 的格式是这样的。分成两 列,左边是时间,右边是运行的命令。时间是由 5 个部分组成。 例: \* \* \* \* \* wall hello everyone 5 个星号分别代表:minute hour day-of-month month-of-year day-of-week ,而 wall hello everyone 这是命令内容。上面的意识是每分每小时每天每月每周广播 hello everyone。具体时间大家可以自己定义。如果要每两分钟发送就用\*/2 代替第一个\*。也可以是用具体时间来表示。 我们使用 crontab -e 编辑当前用户的 cron 表 这里的 5 个星号就代表的时间和日期: 第一个\*星号代表个小时的第几分钟:minute 范围是从 0-59 第二个\*星号代表每天的第几个小时:hour 范围是从 0-23 第三个\*星号代表每月的第几个日:day-of-month 范围从 1-31 第四个\*星号代表没年的第几个月:month-of-year 范围从 1-12 第五个\*星号代表每周的星期几:day-of-week 范围从 0-6,其中 0 表示星期日 用户名:也就是执行程序要通过哪个用户来执行,这个一般可以省略; 命令:执行的命令和参数。 **时程表的格式如下 :** f1 f2 f3 f4 f5 program 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期 中的第几天。program 表 示要执行的程序。 当 f1 为 \* 时表示每分钟都要执行 program,f2 为 \* 时表示每小时都要执行程序,其余以此类推 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b小时都要执行,其余以此类推 当 f1 为 \*/n 时表示每 n 分钟个时间间隔执行一次,f2 为 \*/n 表示每 n 小时个时间间隔执行一次,其余以此类推 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c... 个小时要执行,其余以此类推 使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。 例 1:如果我要表示 9 月 10 日 25 分执行 ls var/spool/cron 任务怎么表示? 25 \* 10 9 \* ls var/spool/cron 由于我没表示小时,所以就只能里面为每小时 例 2:我要在每周日,每分钟执行 wall Hello redking.blog.51cto.com 这个命令,时间怎么表示? \*/1 \* \* \* 0 wall Hello redking.blog.51cto.com **\*/ 表示每多少分钟执行一次** 例 3:每晚的 21:30 重启 apache。 30 21 \* \* \* /usr/local/etc/rc.d/lighttpd restart 例 4:每月 1、10、22 日的 4 : 45 重启 apache 45 4 1,10,22 \* \* /usr/local/etc/rc.d/lighttpd restart 例 5:每周六、周日的 1 : 10 重启 apache 10 1 \* \* 6,0 /usr/local/etc/rc.d/lighttpd restart 例 6:在每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 apache 0,30 18-23 \* \* \* /usr/local/etc/rc.d/lighttpd restart 例 7:每一小时重启 apache \* \*/1 \* \* \* /usr/local/etc/rc.d/lighttpd restart 例 8:晚上 11 点到早上 7 点之间,每隔一小时重启 apache \* 23-7/1 \* \* \* /usr/local/etc/rc.d/lighttpd restart 例 9:每月的 4 号与每周一到周三的 11 点重启 apache 0 11 4 \* mon-wed /usr/local/etc/rc.d/lighttpd restart 例 10:一月一号的 4 点重启 apache 0 4 1 jan \* /usr/local/etc/rc.d/lighttpd restart 例 11:在 12 月内, 每天的早上 6 点到 12 点中,每隔 3 个小时执行一次 /usr/bin/backup 0 6-12/3 \* 12 \* /usr/bin/backup 例 12:每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha" 20 0-23/2 \* \* \* echo "haha" **3** **、系统级别的计划任务及其扩展** **anacrontab** 这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了, 不要更改配置文件是/etc/conrtab ![](https://file.jishuzhan.net/article/1769698936236281858/733d8562c553ee6d104a035270ced3ed.webp) SHELL:就是运行计划任务的解释器,默认是 bash PATH:执行命令的环境变量 MAILTO:计划任务的出发者用户 HOME:家目录为/ run-parts 是一个脚本,在/usr/bin/run-parts,作用是执行一个目录下的所有脚本/程序。 run-parts /etc/cron.hourly 执行目录/etc/cron.hourly/之下的所有脚本/程序. run-parts 下面就是运行的命令 **vim /etc/crontab 与 crontab -e 写入的定时运行的区别?** **vim /etc/crontab:是系统级别定义的 crontab,/etc/crontab 的所有者和组都是 root** **crontab -e :是用户自定义的 crontab,是所有的用户都可以写入的** **两种方法记录的位置不一样,一个在/etc/ 另一个在/var/ 里面。都被 cron 服务调用** 如果系统在以上说的时间没有开机怎么办?那么这个脚本不就是不能执行了?设计者早就想到了这个问题,所以就有了 cron 服务的扩展,目的就是为了防止非 24 小时开机的计算机遗漏的守护任务,**anacr** **ontab 就是系统计划任务的扩展文件:在一个指定时间间隔错过后自动执行任务** 格式是这样的: period delay job-identifier command period --- 命令执行的频率(天数) delay --- 延迟时间(分钟) job-identifier --- 任务的描述,用在 anacron 的消息中,并作为作业时间戳文件的名称,只能包括 非空白的字符(除斜线外)。 command --- 要执行的命令 ![](https://file.jishuzhan.net/article/1769698936236281858/9cb55291e04116a5583e7435f5dff0ae.webp) 第一行的意思是:每天开机 65 分钟后就检查 cron.daily 文件是否被执行了,如果今天没有被执行就执行他 第二行的意思是:每隔 7 天开机后 70 分钟检查 cron.weekly 文件是否被执行了,如果一周内没有被执行就执行他 第三行的意思也差不多 下面说说关于 cron 服务的控制,和 at 差不多,就是/etc/cron.deny 这个配置文件来控制,里面写入要禁止使用 cron 用户的名字,一行一个就 OK 了

相关推荐
啊哦11118 分钟前
配置防火墙和SELinux(1)
linux·服务器·网络
唐青枫22 分钟前
Linux 换行符的使用详解
linux
软件测试曦曦31 分钟前
如何使用Python自动化测试工具Selenium进行网页自动化?
自动化测试·软件测试·python·功能测试·测试工具·程序人生·自动化
A charmer34 分钟前
【Linux】文件系统知识梳理:从磁盘硬件到文件管理
linux·运维·服务器
Cynthia的梦1 小时前
Linux学习-Linux进程间通信(IPC)聊天程序实践指南
linux·运维·学习
卡戎-caryon1 小时前
【Linux网络与网络编程】03.UDP Socket编程
linux·服务器·网络·笔记·单例模式·udp·网络通信
張萠飛1 小时前
Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题
linux·网络·tcp/ip
孙同学_2 小时前
【Linux篇】自主Shell命令行解释器
android·linux
莲动渔舟2 小时前
Nyquist插件基础:LISP语法-自定义函数
服务器·开发语言·lisp·音频处理·audacity
敲上瘾2 小时前
高并发内存池(二):Central Cache的实现
linux·服务器·c++·缓存·哈希算法