示例:
1)使用具体年月日设置定时任务。
[root@localhost ~]# at 08:00 2022-03-10 //在2022年3月10日8点执行任务 at> touch /tmp/test/fa.txt //设置具体任务,在/tmp/test 目录下创建文件 at> <EOT> //按ctrl+d 提交任务 job 5 at Thu Mar 10 08:00:00 2022 //任务已成功设置 [root@localhost ~]# atq //查看at任务列表 5 Thu Mar 10 08:00:00 2022 a root 复制代码
2)使用now+时间,设置任务。
[root@localhost ~]# at now+30min //在30分钟后执行该任务 at> cp /etc/passwd /tmp/test //设置具体任务,将passwd文件复制到/tmp/test目录下 at> <EOT> //按ctrl+d 提交任务 job 7 at Fri Mar 4 21:20:00 2022 //任务已成功设置 [root@localhost ~]# atq 7 Fri Mar 4 21:20:00 2022 a root 复制代码
3)HH:MM,在今日的 HH:MM 执行,若该时刻已过,则明天此时执行任务。
[root@localhost ~]# date //查询当前时间,为3月4日下午9点 2022年 03月 04日 星期五 21:03:34 CST [root@localhost ~]# at 5pm //在今天下午5点执行 at> touch /ceshi/1.txt at> <EOT> job 11 at Sat Mar 5 17:00:00 2022 //因为今天下午5点已过,所以系统自动改为明天下午5点 复制代码
4)atq查询at任务列表,atrm删除at任务。
[root@localhost ~]# atq //查询at任务列表,有3个任务 5 Thu Mar 10 08:00:00 2022 a root 7 Fri Mar 4 21:20:00 2022 a root 11 Sat Mar 5 17:00:00 2022 a root [root@localhost ~]# atrm 11 //删除工作号为11的at任务 [root@localhost ~]# atq //查询at任务列表,只剩2个任务 5 Thu Mar 10 08:00:00 2022 a root 7 Fri Mar 4 21:20:00 2022 a root 复制代码
8.2 crontab周期性任务设置
8.2.1 crontab命令简介
- 按照预先设置的时间周期(分钟、小时、天......)重复执行用户指定的命令操作。
- 属于周期性计划任务。
- 主要设置文件。
- 全局配置文件,位于文件:/etc/crontab
- 系统默认的设置,位于目录:/etc/cron.*/
- 用户定义的设置,位于文件:/var/spool/cron/用户名
查看/etc/crontab文件:
8.2.2 管理crontab计划任务
crontab命令格式:
crontab -e [-u 用户名] //编辑计划任务 crontab -l [-u 用户名] //查看计划任务 crontab -r [-u 用户名] //删除计划任务 #-u选项缺省时默认针对当前用户,只有超级用户才可以使用-u 复制代码
使用 "crontab -e" 进入 crontab 编辑界面。会打开vim编辑你的任务,输入格式为:
* * * * * 需要执行的任务 #即:时间周期设置 任务内容设置。 #任务内容设置中,命令一定要用绝对路径,例如cp命令,要用/usr/bin/cp,可以用which查看命令的绝对路径 复制代码
每个星号(*)表示不同的时间概念:
项目 | 含义 | 范围 |
第一个"*" | 一小时当中的第几分钟(minute) | 0~59 |
第二个"*" | 一天当中的第几小时(hour) | 0~23 |
第三个"*" | 一个月当中的第几天(day) | 1~31 |
第四个"*" | 一年当中的第几个月(month) | 1~12 |
第五个"*" | 一周当中的星期几(week) | 0~7(0和7都代表星期日) |
时间数值的特殊表示方法:
特殊符号 | 含义 |
*(星号) | 代表任何时间。比如第一个"*"就代表一小时中每分钟都执行一次的意思。 |
,(逗号) | 代表多个不连续的时间点。比如 "0 8,12,16 * * * 命令" 就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 * * 1-6 命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次(即间隔的时间频率)。比如"*/10命令",代表每隔 10 分钟就执行一次命令。 |
时间示例:
0 17 * * 1-5 //周一到周五每天17:00 30 8 * * 1,3,5 //每周一、三、五的8:30 0 8-18/2 * * * //8点到18点之间每2小时 0 * */3 * * //每3天的每个整点 复制代码
应用示例:
1)使用crontab -e 编辑计划任务。每月1日备份文件。
[root@localhost ~]# which cp //查看cp命令的绝对路径 alias cp='cp -i' /usr/bin/cp [root@localhost ~]# crontab -e //编辑计划任务 no crontab for root - using an empty one crontab: installing new crontab [root@localhost ~]# crontab -l //查看计划任务 0 4 1 * * /usr/bin/cp /etc/passwd /data01 复制代码
2)每周五8:00~18:00之间,每隔2小时备份一次。
[root@localhost data01]# crontab -e crontab: installing new crontab [root@localhost data01]# crontab -l 0 4 1 * * /usr/bin/cp /etc/passwd /data01 0 8-18/2 * * 5 /usr/bin/cp /etc/group /data01 复制代码
8.2.3 crontab注意事项
在书写 crontab 定时任务时,需要注意以下几个事项:
- 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
- crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
- 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
- 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。
9 总结
1、查看进程命令
静态查看:ps aux,ps -elf
动态查看:top
查看指定进程:prtstat
以树形结构列出:pstree
列举被打开的文件:lsof
监控系统资源:vmstat、iostat
发现僵尸进程(状态为Z)一定要杀掉。
“cat /proc/PID/status" 可以查看指定进程具体有几个线程。
2、控制进程
- 后台启动:
命令行尾加”&“符号。
- 前后台调度:
ctrl+z 挂起当前进程,
jobs查看任务列表
fg 序号,将前台进程调到后台运行。
bg 序号,将后台暂停的进程恢复执行状态。
- 修改优先级:
nice,启动程序时设置优先级。
renice,修改现有进程的优先级。
- 杀死进程:
kill [信号] PID
killall 进程名
pkill [信号] [-U 用户名]
pkill [信号] [-t 终端名]
3、计划任务管理
- at一次性任务设置
at [HH:MM] [yyyy-mm-dd]:设置一次性任务,按ctrl+d 提交任务。
atq :查看at任务。
atrm:删除at任务。
- crontab周期性任务设置
crontab -e:编辑计划任务。
crontab -l:查看计划任务。
时间格式:分、时、日、月、周几。 可以查看cat /etc/crontab 文件。
*表示任意。
,表示多个不连续的时间点。
-表示连续的时间范围。
/表示频率。
命令要使用绝对路径。
6个选项(时间+任务)都不能为空,必须填写。