Shell脚本实现每个工作日定时执行指定程序

本文介绍了一种使用Shell脚本实现在每个工作日特定时间自动执行指定程序的方法。通过不断检查当前时间并对比预设时间,确保任务仅在周一至周五的工作时间内运行。

我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序。那么有没有办法实现这一功能呢?答案是肯定的。我们可以运用Shell脚本简单实现这一功能。     

原理很简单,Shell脚本内部每隔1秒查询一次当前时间、日期以及星期数,当检测到当前星期数week非0或6(0代表星期天,6代表星期六)且时间curTime大于指定时间startTime时,执行指定的程序program。为了保证每天仅执行一次指定程序program,还引用了变量isFirstTime做标记。具体代码如下:

  1. #!/bin/sh  
  2.   
  3. #Section configuration(配置部分)  
  4. #Task Time ,example:203000(Time 20:30:00);190000(Time 19:00:00);  
  5. startTime=113200  
  6. #the programs you want to execute(要执行的程序)  
  7. program=ps  
  8.   
  9. #Section promgram (程序执行部分)  
  10. perDate=$(date "+%Y%m%d")  
  11. isNewDay=1  
  12. isFirstTime=1  
  13.   
  14. echo 'Task schedule Time: ('$startTime') program: ('$program') Waiting...'  
  15.   
  16. while true ; do  
  17.     curTime=$(date "+%H%M%S")  
  18.     curDate=$(date "+%Y%m%d")  
  19.   
  20.     #Check week day(周末不执行)  
  21.     week=`date +%w`  
  22.     if [ $week -eq 6 ] || [ $week -eq 0 ];then  
  23.         isNewDay=0  
  24.         sleep 1  
  25.         continue  
  26.   
  27.     else  
  28.         #check and run script(工作日执行)  
  29.         if [ "$isNewDay" -eq "1" ];then  
  30.             if [ "$curTime" -gt "$startTime" ];then  
  31.                 if [ "$isFirstTime" -eq "0" ];then  
  32.                     echo 'The program ('$program') Running...'  
  33.                     $program  
  34.                     echo 'The program ('$program') Stopped...'  
  35.                 fi  
  36.                 isNewDay=0  
  37.             else  
  38.                 if [ "$isFirstTime" -eq "1" ];then  
  39.                     echo 'New Day: ('$curDate') Task schedule Time: ('$startTime') Waiting...'  
  40.                     isFirstTime=0  
  41.                 fi  
  42.   
  43.             fi  
  44.         else  
  45.             #new day start(开始新的一天)  
  46.             if [ "$curDate" -gt "$perDate" ];then  
  47.                 echo 'New Day: ('$curDate') Task schedule Time: ('$startTime') Waiting...'  
  48.                 isNewDay=1  
  49.                 perDate=$curDate  
  50.             fi  
  51.         fi  
  52.         sleep 1  
  53.     fi  
  54. done  

该Shell脚本的功能为每个工作日的11点32分执行一次ps命令,执行的效果如下图所示。

Shell脚本实现每个工作日定时执行指定程序

Shell脚本实现每个工作日定时执行指定程序

当然该脚本只是为了演示这一定时原理,实际应用中可以指定其他的程序或者脚本,并利用nohup命令让其后台运行。

转载于:https://www.cnblogs.com/dongxiaoguang/archive/2013/03/12/2956399.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值