其实说白了很简单,就是新建一个文件 。然后把计算任务 写进去。执行完了或者有修改的地方就删除它。然后再crontab 执行下而已
1.添加:echo "1 * * * * /home/test" >> /user/crontabfile
2.删除:sed -i '/test/d' /user/crontabfile
3.然后 crontab /user/crontabfile 就行了.
然而我在测试的时候,一直失败。。。。我在mac下面的时候。sed -i '/test/d' xxxxfile的时候,一直报错。直到在linux下面执行就正常了。
不过,本来就是准备扔在服务器上处理,不影响不影响,我淡定的飘过
众所周知,crontab的最小粒度是分,即当第一位是“*/1”时,即最小单位是每分钟执行。
但是,有时候我们要按秒执行,当然这是比较夸张的了,但每半分钟执行一次还是有可能的,这时候就没有办法了,所以后 来 找啊找,就找到了一篇说明:
XML/HTML代码
- */1 * * * * sh /root/cron.sh
- */1 * * * * sleep 30 && sh /root/cron.sh
执行的时候先sleep 30秒,变相的达到每半分钟执行此命令,果然很变态
windows下面也有模拟crontab的软件,如crontabs,pycrontab等,都是注册成一个服务,然后再执行,但是没有一个软件是比较好用的。总有小问题。
不要被标题所疑惑,这是一个伪多线程。
其实就是利用Crontab的最小单元(分钟)来实现所谓的多线程。因为PHP本身不支持多线程,只有这样将就着了。
我有500条数据需要更新获取状态,但如果一下子获取500条,也是从1~500的循环,而且由于每次获取数据量都较大,内存容易占满,会导致获取数据大概在300多条时就内存出错,所以利用crontab造了个伪线程。
crontab 每分钟执行一遍程序。
每次执行的时候,计数数+20,同时一次获取20条状态,下一次获取的时候,从21开始,如此类推。
为了防止执行过多,因此,利用ps aux|grep xxxx|wc -l来获取有多少条命令在执行。当超过N时,退出不执行。避免内存消耗过多。
如此,原来500条数据获取,如果正常也需要1小时左右,现在换成这种执行方式,反而快了很多。
记录一下,下次就知道了。PHP果然还是不太适合做一些东西,内存在堆积过多后,再怎么释放也释放不干净啊,我即使ini_set('memory_limit','1024M')也没有用。
下次试试python。python的网络库也不错,而且编码库对字符串转换也非常方便。下次折腾折腾
以下内容来自于linux的101个hack,昨天看到了,顺手翻译了一下,毕竟看中文比看英文舒服。翻译的还是有点问题的,理解一下下啦。。。
Hack 74. Crontab
第74个hack:Crontab
Using cron you can execute a shell-script or Linux commands at a specific time and date. For example a sysadmin can schedule a backup job that can run every day.
使用cron功能你可以在任意的时间执行一条shell指令或者Linux的命令。例如系统管理员可以运行一个计划任务来进行每天的备份工作。
How to add a job to the cron?
那么,怎么样把一个任务加入到cron呢?
# crontab –e
0 5 * * * /root/bin/backup.sh
This will execute /root/bin/backup.sh at 5 a.m every day.
上面这条指令,让你在每天上午5点 运行 /root/bin/目录下的 backup.sh 指令
Description of Cron fields.
Cron命令的各个字段的注释。
Following is the format of the crontab file.
crontab文件的格式均以下格式
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
{分钟} {小时} {每月的第几天} {月份} {每周的第几天} {指令的全路径}
o minute: Allowed range 0 -59
o 分钟的取值范围是 0-59
o hour: Allowed range 0 -23
o 小时的取值范围是 0-23
o day-of-month: Allowed range 0 - 31
o 每月的第几天,取值范围为 0-31
o month: Allowed range 1 -12. 1 = January. 12 = December.
o 月份的取值范围为 1-12 ,1是1月,12是12月
o Day-of-week: Allowed range 0 -7. Sunday is either 0 or 7.
o 每周的第几天,取值范围为0-7,0或者7都代表星期天
Crontab examples
Crontab 的例子
1. Run at 12:01 a.m. 1 minute after midnight everyday. This is a good time to run backup when the system is not under load.
1. 每天午夜12点零1分 ,当系统不再被加载时就是进行备份的好时机(not under load翻译不来)
1 0 * * * /root/bin/backup.sh
2. Run backup every weekday (Mon – Fri) at 11:59 p.m.
每周1-5晚上11点59分执行备份操作
59 11 * * 1,2,3,4,5 /root/bin/backup.sh
Following will also do the same.
下面的例子则是另一种格式,功能完全一致
59 11 * * 1-5 /root/bin/backup.sh
3. Execute the command every 5 minutes.
每五分钟执行一条命令
*/5 * * * * /root/bin/check-status.sh
4. Execute at 1:10 p.m on 1st of every month
每月第一天的下午1点10分执行备份
10 13 1 * * /root/bin/full-backup.sh
5. Execute 11 p.m on weekdays.
每周工作日的下午11点执行备份
0 23 * * 1-5 /root/bin/incremental-backup.sh
Crontab Options
Crontab 的一些参数
Following are the available options with crontab:
以下是crontab所支持一些参数
o crontab –e : Edit the crontab file. This will create a crontab, if it doesn’t exist
o crontab -e : 编辑crontab文件,如果文件不存在,则创建一个crontab
o crontab –l : Display the crontab file.
o crontab -l : 显示crontab文件
o crontab -r : Remove the crontab file.
o crontab -r : 删除crontab文件
o crontab -ir : This will prompt user before deleting a crontab.
o crontag -ir : 删除crontab文件,但在删除前会让用户进行确认