<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]用crontab每半秒或者几秒执行一个命令，踩坑记录-crontab每10秒执行一次。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 27 May 2011 15:38:27 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	问题：rontab里最小的时间单位是分钟，我用*/120,想让每半分钟执行一次，也不行啊。<br/><br/><textarea name="code" class="php" rows="15" cols="100">
###每到20秒执行一次，要写3个，20秒一次，40秒一次，1分钟一次。三个综合下来就是每20秒执行一次
* * * * * sleep 20&amp;&amp;/usr/bin/php /var/www/getNowTempValueFromCom.php
* * * * * sleep 40&amp;&amp;/usr/bin/php /var/www/getNowTempValueFromCom.php
* * * * * /usr/bin/php /var/www/getNowTempValueFromCom.php
</textarea><br/><br/>比如同步：<br/><textarea name="code" class="php" rows="15" cols="100">
#每到20秒执行一次，要写3个，20秒一次，40秒一次，1分钟一次。三个综合下来就是每20秒执行一次
*/1 * * * *&nbsp;&nbsp; sleep 20&amp;&amp;/usr/local/rsync/bin/rsync -avh /backup/jackxiang.com /data/www &gt;/dev/null 2&gt;&amp;1
*/1 * * * *&nbsp;&nbsp; sleep 40&amp;&amp;/usr/local/rsync/bin/rsync -avh /backup/jackxiang.com /data/www &gt;/dev/null 2&gt;&amp;1
*/1 * * * *&nbsp;&nbsp; /usr/local/rsync/bin/rsync -avh /backup/jackxiang.com /data/www &gt;/dev/null 2&gt;&amp;1
</textarea><br/><br/><br/><br/><br/><textarea name="code" class="php" rows="15" cols="100">
#每隔5秒检查一次串口温度并更新数据库
* * * * * sleep 5&amp;&amp;&nbsp;&nbsp;/data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 10&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 15&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 20&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 25&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 30&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 35&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 40&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 45&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 50&amp;&amp; /data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
* * * * * sleep 55&amp;&amp; /usr/bin/php /data/htdocs/t.jackxiang.com/getNowTempValueFromCom.php
</textarea><br/>/data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh<br/><br/>/usr/bin/php /data/htdocs/t.jackxiang.com/getNowTempValueFromCom.php<br/>简单实现让一个进程去读取串口的操作，这样通过循环读取出来的数据值也就更快更准，否则多个去读容易读乱了，主要是用的while去循环读取这块要是c可能select去操作：<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
Error_reporting(E_ALL);
$file = &quot;/data/htdocs/t.jackxiang.com/lockFileFlag.txt&quot;;&nbsp;&nbsp;&nbsp;&nbsp;//文件锁标志位
if(!file_exists($file))&#123;//文件不存在则创建一个空文件作为标志位
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_put_contents($file, &#039;&#039;);
&#125;else&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die(&quot;有进程在读取，予以退出。&quot;);
&#125;

.......


unlink($file);

</textarea><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>回答：我想应该是不行的，因为 cron 每分钟才读一次配置文件，看哪些命令要执行，精度应该不能再高了。<br/>有没有其他的解决方案：<br/>这种思路挺巧妙的<br/>但为什么不设置成开机后就启动这个脚本，然后在脚本里面控制间隔呢。<br/>换个思路如下：<br/>方法1：<br/>两个脚本<br/>1个正常，一个sleep30<br/>crontab设置同时启动，想到的只有这个办法了<br/><br/>让其中一个脚本睡眠30秒，另一个正常运行<br/>举例<br/>a.sh是你的脚本<br/>再写一个b.sh<br/>内容如下：<br/>&nbsp;&nbsp;sleep 30<br/>&nbsp;&nbsp; a.sh<br/>然后在cron中把这两个脚本都加进去，设置一样的启动条件（分钟是*）<br/><br/>shell知识：<br/>在有的shell（比如linux中的bash）中sleep还支持睡眠（分，小时）<br/>sleep 1&nbsp;&nbsp;&nbsp;&nbsp;睡眠1秒<br/>sleep 1s&nbsp;&nbsp;&nbsp;&nbsp;睡眠1秒<br/>sleep 1m&nbsp;&nbsp; 睡眠1分<br/>sleep 1h&nbsp;&nbsp; 睡眠1小时<br/>方法2：<br/>TenSecend.sh<br/><textarea name="code" class="html" rows="15" cols="100">
while true ;do
command
sleep XX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//间隔秒数
done
</textarea><br/><br/>方法3：<br/>* * * * * cmd<br/>* * * * * (sleep 10 &amp;&amp; cmd)<br/>* * * * * (sleep 20 &amp;&amp; cmd)<br/>* * * * * (sleep 30 &amp;&amp; cmd)<br/>* * * * * (sleep 40 &amp;&amp; cmd)<br/>* * * * * (sleep 50 &amp;&amp; cmd)<br/>这样就可以了,这是个简单的问题,而我没有在Jackxiang上得到答案,看来绝对是我描述问题的方法有问题.&nbsp;&nbsp;下次定要记得把问题说清楚,这样各位朋友才好帮到我,呵呵~<br/><br/>你可以不停的使用<br/>at<br/>batch<br/><br/>不过得保证10秒程序执行完。<br/><br/><br/><br/><br/><br/><br/><br/>=====================踩坑记录-crontab每10秒执行一次==================================<br/>写在前面，记录一个linux小白使用crontab中遇到的各种坑及解决思路方法。网上帖子千千万，坑也是千千万。记录下，分享给大家。<br/>需求：linux中使用crontab每十秒执行一次<br/>场景：需要在ubuntu14服务器中使用代理每十秒执行一次curl来访问互联网，来测试代理网络稳定性。<br/>经过网上的大量搜贴之后得到的可用的一个结论如下：<br/># crontab -e<br/>* * * * * /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>* * * * * sleep 10; /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>* * * * * sleep 20; /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>* * * * * sleep 30; /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>* * * * * sleep 40; /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>* * * * * sleep 50; /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>如果你是直接一梭子全复制，改下目录那么恭喜你完成了计划任务。而我就不是了，我只写了sleep 10 这条然后任务没有执行。这就是坑。<br/><br/>坑1 .上面sleep 10 20 30 ...是啥意思啊，怎么个规则啊。一头雾水，当时我是直接把第二个sleep 10 那个定时任务直接粘进去的。然后，任务没有执行就一直纠结任务没有执行这个问题。<br/>坑2.ubuntu系统第一次使用crontab -e 需要选择比编辑器，如果选nano上，对我这种小白可就蒙圈。最后在命令行使用, select-ediort 来选择编辑器选3 vim 就好了<br/>后来，明白后做了实验。<br/>如果只写前两条的话是：在每分钟的第一秒和第一个10秒执行一次<br/>* * * * * /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>* * * * * sleep 10; /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/><br/><br/>以此类推只写前三的话就是：在每分钟的第一、第一个十秒、第二个十秒分别执行一次<br/>* * * * * /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>* * * * * sleep 10; /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>* * * * * sleep 20; /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>如果都写上的话就是每十秒执行一次啦，完美过程。<br/><br/>过程遇到的问题(1)：crontab -e 完都有新邮件<br/><br/>原因：1.crontab 每次执行完程序产生的输出都会发邮件到/var/mail/root<br/>2.定时任务语法有误，/var/mail/root&nbsp;&nbsp;发送的是错误日志，如下<br/><br/>root@bogon:/usr/local# tail -20 /var/mail/root<br/>From root@bogon&nbsp;&nbsp;Tue May 21 18:31:11 2019<br/>Return-Path: &lt;root@bogon&gt;<br/>X-Original-To: root<br/>Delivered-To: root@bogon<br/>Received: by bogon (Postfix, from userid 0)<br/>&nbsp;&nbsp;id AAFCB43077; Tue, 21 May 2019 18:31:11 +0800 (CST)<br/>From: root@bogon (Cron Daemon)<br/>To: root@bogon<br/>Subject: Cron &lt;root@bogon&gt; sleep 10; sh /home/liuxin/curl-status.sh &gt;dev/null 2&gt;&amp;1<br/>Content-Type: text/plain; charset=ANSI_X3.4-1968<br/>X-Cron-Env: &lt;SHELL=/bin/sh&gt;<br/>X-Cron-Env: &lt;HOME=/root&gt;<br/>X-Cron-Env: &lt;PATH=/usr/bin:/bin&gt;<br/>X-Cron-Env: &lt;LOGNAME=root&gt;<br/>Message-Id: &lt;20190521103111.AAFCB43077@bogon&gt;<br/>Date: Tue, 21 May 2019 18:31:11 +0800 (CST)<br/><br/>/bin/sh: 1: cannot create dev/null: Directory nonexistent<br/><br/>解决：如果是1的话就放到黑洞&nbsp;&nbsp;&gt;/dev/null 2&gt;&amp;1<br/>* * * * * /usr/local/cc.sh &gt;/dev/null 2&gt;&amp;1<br/>精讲：1，/dev/null是linux系统的一个垃圾桶(一个不正经的比喻)有不用的输出都可以往里面扔。&gt;/dev/null 缺省默认是1 即 1&gt;/dev/null<br/>2，linux中有三种标准输入输出，分别是STDIN，STDOUT，STDERR，对应的数字是0，1，2&nbsp;&nbsp;&nbsp;&nbsp;2&gt;&amp;1就是把2错误输出重定向到1标准输出&nbsp;&nbsp;而1又输出到/dev/null黑洞<br/>如果不想输出到一个文件可以这样写<br/>* * * * * /usr/local/cc.sh &gt;&gt;/usr/local/log.txt 2&gt;&amp;1<br/>过程中遇到的问题(2)：如图crontab -e 后是新文件<br/><br/>解决：crontab语法错误再三检查后，建议select-editor 选3&nbsp;&nbsp;vim<br/><br/>来自：https://mp.weixin.qq.com/s/CoWxVO5wlsJcIhv9a8sdKQ
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]用crontab每半秒或者几秒执行一个命令，踩坑记录-crontab每10秒执行一次。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>