Linux后台定时任务

最近做的项目需要定期进行一些计算和更新数据的操作,这些操作都是运行在公司的服务器上,为此需要学习一下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"

然后就是把执行该shell脚本的操作添加到后台定时任务中,这里可以使用crontab,时程表的格式如下:


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)

上面这条语句就是在14号的13点02分执行long_keyword_phrase.sh脚本。
long_keyword_phrase.sh

你可能感兴趣的:(Felven在职场)