最近做的项目需要定期进行一些计算和更新数据的操作,这些操作都是运行在公司的服务器上,为此需要学习一下linux定时任务的相关知识。
首先是自己编写shell脚本,shell脚本中的语句都是顺序执行,在shell脚本中可以调用其他的shell脚本,总体来说还是很方便的,一个shell脚本的例子如下:
#eliminate duplicate echo "eliminate duplicate begining" /opt/sohuhadoop/hive/bin/hive -e "insert overwrite table temp_news select a.nid, a.oid, a.t, a.co, a.me, a.ct from log.allnews a left semi join (select max(nid) uniq_nid from log.allnews group by oid) b on (a.nid = b.uniq_nid) where a.oid > 0;" echo "eliminate duplicate finished" rm -rf /data/mrd/fanzhaoxin/temp_news echo "news download begining" #export news from warehouse, log.allnews /opt/sohuhadoop/hadoop/bin/hadoop fs -get warehouse/temp_news /data/mrd/fanzhaoxin/ echo "news download finished" ssh [email protected] "rm -rf /data/data/content/nid_oid_t_co/temp_news/" echo "transfer file begining" scp -r /data/mrd/fanzhaoxin/temp_news [email protected]:/data/data/content/nid_oid_t_co/ echo "transfer file done"
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
具体使用时,先crontab -e 进入全部的定时任务列表,然后再添加需要执行的shell脚本即可,例如:
#long_keyword_generation 2 13 14 * * (source $HOME/.bash_profile;/data/mrd/fanzhaoxin/long_keyword_phrase.sh >> /data/mrd/fanzhaoxin/long_keyword_phrase.log 2>&1)
long_keyword_phrase.sh