linux 任务定时执行 & 信息提取

任务定时执行

linux中使用crontab来定时执行某些操作。

当用户使用 crontab 这个指令来建立工作排程之后,该项工作就会被记录到 /var/spool/cron/ 里面去了,而且是以账号来作为判别。举例来说, userliu 使用 crontab 后, 他的工作会被记录到var/spool/cron/userliu 里头去。

预设情况下,任何使用者只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达『crontab -e 』去编辑自己的例行性命令。

语法

[root@www ~]# crontab [-u username] [-l|-e|-r]
选项不参数:
-u :只有 root 才能进行这个任务,亦即帮其他使用者建立/移除 crontab 工作
排程;
-e :编辑 crontab 的工作内容
-l :查阅 crontab 的工作内容
-r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。

新建定时任务:

这里写图片描述
一共6个参数 ,前5个确定时间, 最后一个写需要执行的指令。

代表意义 分钟 小时 日期 月份 指令
数字范围 0-59 0-23 1-31 1-12 0-7 指令内容

注意 : 周的数字为 0 或 7 时,都代表『星期天』的意思

这里写图片描述

范例

第一步:
crontab -e
第二步:输入
*/10 * * * * /userfs/MJRobot/mem.sh
表示每隔10分钟执行一次mem.sh脚本

( ps: 一般ARM 下默认编辑器为vi, Ubuntu下默认为nano)

信息提取

本实例需要监视某进程的内存使用情况,因此决定写一个脚本,定时获取该进程占用系统内存并输出到文本。

范例1: ARM版本

#!/bin/sh
#
#打印系统的虚拟内存信息#
#

cur_time=$(date "+%Y/%m/%d %T")

cur_CPU=$(top -n1 | grep "progressName" | grep -v grep)

echo -e ""$cur_time"   "$cur_CPU"" >> /userfs/MJRobot/cpu.txt

分析:
0. ARM linux中裁掉了bash,此处使用 /bin/sh
1. top -n1 : 获取内存信息,并指打印一次(默认会3s刷新一次)
2. grep : 获取需要的进程信息
3. grep -v grep :去掉 grep 本身这个进程(因为使用grep进行提取了,该进程包含progressName)

ps : 此方法可能获取不到ProgramName的进程消息,因为top -n1 打印的消息没有列出全部进程,但是由于linux内核裁剪的厉害,没有top -p 命令,因此暂用此法。

范例2: Ubuntu版本

#!/bin/sh
#
#打印系统的虚拟内存信息
#

cur_time=$(date "+%Y/%m/%d %T")

cur_CPU=$(top -n1 -p  $(ps -ef | grep "progressName" | grep -v grep | cut -d " " -f8) | grep progressName)
echo "$cur_time  $cur_CPU" >> /home/liu/Desktop/cpu.txt

分析:
1. 此方法使用ps -ef 与进程名称,获取pid,
2. cut -d ” ” -f8 使用空格分割,然后去第8段。由于一个tab键等于8个空格
3. 通过pid,使用 top -p PID 确保能够获取该进程的内存使用信息

关于根据进程名获取pid的更多方法可以参考:http://blog.csdn.net/baidu_33850454/article/details/78568392


Contact Me :[email protected]

猜你喜欢

转载自blog.csdn.net/baidu_33850454/article/details/78568952