让linux定时执行秒级任务
http://www.blogjava.net/dongbule/archive/2011/01/19/343227.html
问题是这样的,有个脚本需要10秒钟执行一次,脚本具体功能就不细说,定时任务自然选用crontab,但是crontab最小的执行时间为分钟,最后决定选用死循环进行实现。
脚本
vi hello.sh
#!/bin/sh
while :
do
echo `date` >> /home/chenyz/1 //这里是任务的实现
sleep 10
done
这里的程序运行时间间隔是10s,小心咯,如果没有加sleep 10,你的机器很快就会耗尽资源,负载会狂飙。
接着需要把脚本用后台守护进程来运行,避免用户退出而导致脚本失效
nohup sh hello.sh &
btw,nohup就是no hang up(不挂起)
最后检查一下执行用户退出后相应的进程是否继续在运行
root@tech163:/home/chenyz# ps -aux | grep hello
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
root 17275 0.0 0.1 1840 544 pts/1 S 17:33 0:00 /bin/sh ./hello.sh
root@tech163:/home/chenyz# vi 1
Wed Jan 19 17:09:02 CST 2011
Wed Jan 19 17:09:12 CST 2011
Wed Jan 19 17:09:22 CST 2011
Wed Jan 19 17:09:32 CST 2011
Wed Jan 19 17:09:42 CST 2011
Wed Jan 19 17:09:52 CST 2011
如果有更好的办法和想法,虚心请教,欢迎讨论
crontab 是分钟级别的定时
>/dev/null
注意:当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh > /dev/null 2>&1
/dev/null 的作用是把屏幕的输出从指向到某处,而这里的到/dev/null 的意思是指向空设备,即不需要标准输出
ret=$? //获取返回值,0为ping成功
12
第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间。
while true ;do
command
sleep XX //间隔秒数
done
shell判断一个变量是否为空方法总结
shell中if判断一个变量为空
https://www.cnblogs.com/zwgblog/p/6006063.html
1.最直接简单的判断
[ ! $a ] && echo "a is null"
不用那些if语句了,直接缩短代码量。
- 变量通过" "引号引起来
如下所示:,可以得到结果为 IS NULL.
#!/bin/sh
a=
if [ ! -n "$a" ]; then
echo "IS NULL"
else
echo "NOT NULL"
fi
- 直接通过变量判断
如下所示:得到的结果为: IS NULL,跟第一种方法一样的,只是代码长一点,推荐使用第一种判断方式,简单明了。
#!/bin/sh
a=
if [ ! $a ]; then
echo "IS NULL"
else
echo "NOT NULL"
fi
- 使用test判断
得到的结果就是: a is not set!
#!/bin/sh
a=
if test -z "$a" then
echo "a is not set!"
else
echo "a is set !"
fi
- 使用""判断
#!/bin/sh
a=
if [ “$a” = “” ]; then
echo “a is not set!”
else
echo “a is set !”
fi
这种情况下容易让脚本报错
“=”左边为空时很多shell环境下报这个错
转自:http://luxiaok.blog.51cto.com/2177896/925548