手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:crontab

动态添加和删除crontab

 其实说白了很简单,就是新建一个文件 。然后把计算任务 写进去。执行完了或者有修改的地方就删除它。然后再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下面执行就正常了。

不过,本来就是准备扔在服务器上处理,不影响不影响,我淡定的飘过

Tags: crontab

让CRONTAB精确到秒的执行任务

众所周知,crontab的最小粒度是分,即当第一位是“*/1”时,即最小单位是每分钟执行。
但是,有时候我们要按秒执行,当然这是比较夸张的了,但每半分钟执行一次还是有可能的,这时候就没有办法了,所以后 来 找啊找,就找到了一篇说明:

XML/HTML代码
  1. */1 * * * * sh /root/cron.sh  
  2. */1 * * * * sleep 30 && sh /root/cron.sh  

执行的时候先sleep 30秒,变相的达到每半分钟执行此命令,果然很变态

windows下面也有模拟crontab的软件,如crontabs,pycrontab等,都是注册成一个服务,然后再执行,但是没有一个软件是比较好用的。总有小问题。

Tags: crontab

crontab 式的多线程

不要被标题所疑惑,这是一个伪多线程。
其实就是利用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的网络库也不错,而且编码库对字符串转换也非常方便。下次折腾折腾

Tags: crontab

翻译:crontab的介绍

以下内容来自于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文件,但在删除前会让用户进行确认

Tags: crontab