查看“Linux任务调度”的源代码
←
Linux任务调度
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
linux允许用户根据需要,在指定的时间自动运行指定的进程,也允许用户将非常消耗资源和时间的进程,如数据备份,扫描病毒等,安排到系统比较空闲的时间,由系统自动执行,这种让系统在特定的时间执行指定任务的方法,称为任务调度。 用户可采用以下方法实现任务调度: *对于只只运行一次的进程,采用at调度 *对于特定时间重复运行的进程采用cron调度。 == 计划任务管理 —— at == ===简介=== 在指定的日期、时间点自动执行预先设置的一些命令操作,属于一次性计划任务 服务脚本名称:/etc/init.d/atd 设置格式:at [HH:MM] [yyyy-mm-dd] <nowiki>[root@localhost ~]# systemctl start atd 启动 atd: [确定] [root@localhost ~]# date Mon Jul 2 08:14:33 CST 2018 [root@localhost ~]# at 08:16 at> who at> wall Happy #按Ctrl+ D 提交任务 at> ^F<EOT> job 2 at 2018-07-02 08:16 ... [root@localhost ~]# date Mon Jul 2 08:16:00 CST 2018 [root@localhost ~]# Broadcast message from root@localhost.localdomain (Mon Jul 2 08:16:01 2018):Happy </nowiki> ===表达方式=== 时间参数: *绝对时间表达法:at 17:30 05012015 *相对时间表达法: <nowiki>at 14:00 at now + 1 hour at 17:00 tomorrow at 4:30pm + 2 days</nowiki> <nowiki>[root@ecs-c6f9 ~]# at now + 3 hours warning: commands will be executed using /bin/sh at> <EOT> job 7 at Tue May 17 11:53:00 2022 [root@ecs-c6f9 ~]# at 09:00am +3days warning: commands will be executed using /bin/sh at> <EOT> job 8 at Fri May 20 09:00:00 2022 [root@ecs-c6f9 ~]# at 09:00 05172022</nowiki> ===案例1:三天后的下午5点执行/bin/ls /=== 命令: <nowiki>[root@vms002 /]# at 5pm+3 days at> /bin/ls /<EOT> job 1 at Fri Jun 14 17:00:00 2019</nowiki> ===案例2:明天17点钟,输出时间到指定文件内=== 命令: <nowiki>[root@vms002 /]# at 17:00 tomorrow at> date > /root/date.log at> reboot at> <EOT> job 2 at Wed Jun 12 17:00:00 2019</nowiki> ===案例3:计划任务设定后,在没有执行之前我们可以用atq命令来查看系统中没有执行的工作任务=== 命令: <nowiki>[root@vms002 /]# atq 1 Fri Jun 14 17:00:00 2019 a root 2 Wed Jun 12 17:00:00 2019 a root</nowiki> ===案例4:删除已经设置的任务=== 命令: <nowiki>[root@vms002 /]# atq 1 Fri Jun 14 17:00:00 2019 a root 2 Wed Jun 12 17:00:00 2019 a root [root@vms002 /]# atrm 1 [root@vms002 /]# atq 2 Wed Jun 12 17:00:00 2019 a root</nowiki> ===案例5:显示已经设置的任务内容=== 命令: <nowiki>[root@vms002 /]# at -c 2 #!/bin/sh # atrun uid=0 gid=0 # mail root 0 umask 22 ******此处省略部分内容***** date > /root/date.log</nowiki> 思考题: <nowiki>绝对时间 关机 今天几点 备份 两个小时后 重启 明天几点 清空目录 从几点开始两天后 打印字符</nowiki> == 计划任务管理 —— crontab == 艾特调度中指定的命令只能执行一次,但在实际的系统管理中,有些命令需要在指定的日期和时间重复执行,即具有周期性执行的特点,例如每天例行的数据备份工作,cron调度就能满足这种需要。 ===什么是crontab=== 按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作,属于周期性计划任务 服务脚本名称:/etc/init.d/crond 主要设置文件: 全局配置文件,位于文件:/etc/crontab 用户定义的设置,位于文件:/var/spool/cron/用户名 ===crond守护进程=== crond守护进程每隔一分钟就检测一次,是所有注册用户的crontab配置文件,并按照其设置内容,定期重复执行指定的cron调度工作。在红帽系统中,crond守护进程有crond服务管理,因此该守护进程可以用service命令启动,停止或查看。 <nowiki>[root@localhost ~]# systemctl status crond crond (pid 1762) is running... [root@localhost ~]# chkconfig --list crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off</nowiki> 默认情况下,crond服务在系统启动时自动启动,并一直运行于后台。 ===crontab配置文件=== crontab配置文件用于存放任务调度的时间和要启动的进程等信息。crond进程,维护着一个缓冲池(spool)目录,来保持crontab文件,通常这个目录是/var/spool/cron。另外在/etc还有一个全局配置文件/etc/crontab配置文件 === 管理cron计划任务 === 编辑计划任务:crontab -e [-u 用户名] 查看计划任务:crontab -l [-u 用户名] 删除计划任务:crontab -r [-u 用户名] root用户可以管理指定用户的计划任务 普通用户只能管理自己的计划任务 crontab -e */5 * * * * echo "hello world" === crontab任务的配置格式 === 按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作,属于周期性计划任务 [root@localhost ~]# cat /etc/crontab <nowiki>SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # 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 # | | | | | # * * * * * command to be executed </nowiki> [[文件:linux5-2.png]] 时间数值的特殊表示方法 <nowiki> * 表示该范围内的任意时间 , 表示间隔的多个不连续时间点 - 表示一个连续的时间范围 / 指定间隔的时间频率</nowiki> 应用示例 <nowiki> 0 17 * * 1-5 周一到周五每天17:00 30 8 * * 1,3,5 每周一、三、五的8点30分 0 8-18/2 * * * 8点到18点之间每隔2小时 0 * */3 * * 每隔3天</nowiki> 应用示例2: <nowiki>*/5 * * * * echo "hello world" 0 17 * * * echo "hello world" 0 17 * * 1-5 echo "hello world" 0 17 * * 1,3,5 echo "hello world" 0 8-18/2 * * 1,3,5 echo "hello world"</nowiki> === crontab应用示例 === 示例1(root用户): *每天早上7:50自动开启sshd服务,22点50时关闭 *每隔5天清空一次FTP服务器公共目录/var/ftp/pub *每周六的7:30时,重新启动httpd服务 *每周一、三、五的17:30时,打包备份/etc/httpd目录 50 7 * * * service sshd start 50 22 * * * service sshd stop * * */5 * * rm -rf /var/ftp/pub/* 30 7 * * 6 service httpd restart 30 17 * * 1,3,5 tar -zxvf /etc/httpd -C /usr/local 示例2(jerry用户): 每周日晚上23:55时将“/etc/passwd”文件的内容复制到宿主目录中,保存为pwd.txt文件 示例3: root用户查看自己的计划任务列表 查看并删除jerry用户设置的计划任务 <nowiki>[root@localhost root]# crontab -l -u jerry 55 23 * * 7 /bin/cp /etc/passwd /home/jerry/pwd.txt [root@localhost root]# crontab -r -u jerry [root@localhost root]# crontab -l -u jerry no crontab for jerry [root@localhost root]# </nowiki> ==实验:管理进程并设置计划任务 == === 需求描述 === *管理系统中的进程 **确认vsftpd、sshd服务的启动状态,并关闭vsftpd服务 **启动bluetooth服务,然后使用kill命令终止其运行 **查找系统中CPU占用率超过80的进程,并强行终止该进程 **练习各种进程管理命令的使用 *设置计划运行的系统管理任务 **每周一早上7:50自动清空FTP服务器公共目录“/var/ftp/pub” **每天晚上10:30分自动执行任务,保存磁盘使用情况信息 *查看所设置的计划任务列表
返回至
Linux任务调度
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息