本文涉及到的命令主要有:
1、作业管理: jobs、 ctrl+Z(按键)、 fg 、 bg、 kill、 killall、 nohup、 screen
2、任务计划: at、 crontab、 sleep
一、Linux作业管理
- Linux的作业控制
前台作业:通过终端启动,且启动后一直占据终端;
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
- 让作业运行于后台
运行中的作业: Ctrl+z (会自动转为休眠模式)
尚未启动的作业: COMMAND &
- 查看当前终端所有作业:jobs
查看到的后台作业中,显示有+ –的,如果用 fg 命令后面不指定作业号时,+为默认调用的第一个作业,–为第二个作业,越早送到后台的作业,默认越晚被调回
- 作业控制:
fg [JOB_NUM] 把指定的后台作业调回前台
bg [JOB_NUM] 让送往后台的作业在后台继续运行
kill [%JOB_NUM] 终止指定的作业(这里作业号前面一定要加%,否则会与 kill 的命令冲突)
killall -19 COMMAND 将后台作业转入休眠模式
killall -18 COMMAND 将后台作业转入运行模式
- 后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系
nohup COMMAND [&>/dev/null] & (如果不加中括号里的重定向,则执行命令后的标准输出及错误会追加至nohup.out)
screen ; COMMAND (开启分屏会话,然后执行任务,screen -r 恢复回话)
二、并行运行
同时运行多个进程,提高效率
- 方法1 :编辑脚本,将要执行的任务写入脚本
vi all.sh
f1.sh &
f2.sh &
f3.sh &
- 方法2 :小括号
(f1.sh &);(f2.sh &);(f3.sh &)
- 方法3 : 大括号
{ f1.sh & f2.sh & f3.sh & }
三、任务计划
定时执行一次任务:at
周期性运行任务:cron
(共同点:没有被重定向的输出和错误以邮件通知给相关用户;根用户能够修改其它用户的作业)
- 共同点:运行结果的标准输出和错误以邮件通知给相关用户
COMMAND > /dev/null 则执行正确之后,不发送执行结果;但执行错误还是会发送邮件
COMMAND &> /dev/null 则执行结果无论对错都不发送邮件
at一次性任务
- 包:at
需要启动atd服务,才能实现at任务。
centos6启用:service atd start
centos7启用:systemctl start atd
- at命令:at [option] TIME
常用选项:
-V 显示版本信息
-l 列出指定队列中等待运行的作业;相当于atq (at队列存放在/var/spool/at/目录中)
-d # 删除指定的作业;相当于atrm
-c # 查看具体作业任务
-f /path/from/somefile 从指定的文件中读取任务
-m 当任务被完成之后,将给用户发送邮件,即使没有标准输出
- TIME 定义出什么时候进行 at 这项任务的时间
HH:MM [YYYY-mm-dd] (如14:00 [2018-05-06] )
noon(中午12点), midnight(晚上12点), teatime(下午4点)
tomorrow
now+#{minutes,hours,days, OR weeks} (如 now + 3 minutes)
- 执行方式:
1)交互式 (如 :输入 at now + 1 minutes 回车后系统会等待输入任务,输入完成后 ctrl + d提交)
2)输入重定向 (如:echo ping 8.8.8.8 | at now + 1 minutes,或 at now + 1 minutes < /path/from/somefile )
3)at –f /path/from/somefile
- at任务的用户控制功能
/etc/at.{allow,deny}控制用户是否能执行at任务
白名单:/etc/at.allow 默认不存在;如果建立白名单,只有该文件中的用户才能执行at命令
黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
如果两个文件中有同一个用户,则白名单优先;
如果两个文件都不存在,只有 root 可以执行 at 命令。
cron周期性任务
- 相关的程序包:
cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务。(家用电脑由于关机会有这方面问题,生产中服务器不关机一般不会影响周期任务执行,了解即可)
crontabs:包含CentOS提供系统维护任务
- 确保crond守护处于运行状态:
CentOS 7: systemctl status crond
CentOS 6: service crond status
- 1)系统cron任务:系统维护作业 /etc/crontab
- 2)用户cron任务:crontab命令
日志:/var/log/cron (追踪周期任务,误删任务时可根据日志找回)
- 对于cron任务来讲,%有特殊用途,如果在命令中要使用%,则需要转义,或放置于单引号,或写入脚本中然后调用此脚本。
1)系统cron任务:系统维护作业 /etc/crontab
- 直接编辑 /etc/crontab 文件 ,格式如下图所示:
例:30 21 * * * root /bin/echo “nihao” 每天晚上9点30分执行echo命令
- 时间表示法:
- 特定值:给定时间点有效取值范围内的值
- * 给定时间点上有效取值范围内的所有值,表示“每…” (如:* 02 * * * 表示每天2点每分钟执行任务)
- #,#,# 离散取值 (如:0 2 1,3,5 * * 表示每个月1号3号5号的2点00分执行任务)
- #-# 连续取值 (如:0 2 1-5 * * 表示每个月1号到5号的2点00分执行任务)
- /# 在指定时间范围上,定义步长 (如:0 */3 * * * 表示每天每3个小时执行任务)
- 特定的时间格式:
@reboot 表示每次重启之后运行一次
@yearly 表示每年运行一次,功能相当于 0 0 1 1 *
@annually 表示每年运行一次,功能相当于0 0 1 1 *
@monthly 表示每月运行一次,功能相当于0 0 1 * *
@weekly 表示每周运行一次,功能相当于0 0 * * 0
@daily 表示每天运行一次,功能相当于0 0 * * *
@hourly 表示每小时运行一次,功能相当于0 * * * *
- 在秒级别运行任务:结合 sleep 命令
sleep NUMBER[SUFFIX]…
SUFFIX:
s: 秒, 默认
m: 分
h: 小时
d: 天如:* * * * * wall 1 ; sleep 20; wall 2 ; sleep 20 ; wall 3 表示每个广播任务之间间隔20秒。
- 系统的计划任务:
/etc/crontab
/etc/cron.d/ 配置文件
/etc/cron.hourly/ 脚本
/etc/cron.daily/ 脚本
/etc/cron.weekly/ 脚本
/etc/cron.monthly/ 脚本
- 管理临时文件:
CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件
CentOS7使用systemd-tmpfiles-setup服务实现
2)用户cron任务:crontab命令
crontab命令定义:每个用户都有专用的cron任务文件: /var/spool/cron/USERNAME
- crontab命令: crontab [-u user] [-l | -r | -e] [-i]
-l 列出所有任务
-e 编辑任务
-r 移除所有任务
-i 同-r一同使用,以交互式模式移除指定任务
-u user 仅root可运行,指定用户管理cron任务
- 控制用户执行计划任务:
/etc/cron.{allow,deny} (性质同 at 任务的黑白名单,如果一个用户之前不在黑名单,后来加入黑名单,那他之前所创建的周期任务依然会定期执行)
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97658