任务定时执行
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]