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脚本实现每个工作日定时执行指定程序

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

  原文地址:http://ju.outofmemory.cn/entry/2058

原文地址:https://www.cnblogs.com/shujuxiong/p/9023254.html

时间: 2025-01-10 14:18:02

Shell脚本实现每个工作日定时执行指定程序的相关文章

Linux定时执行指定的脚本文件

Linux执行脚本文件,该脚本定时执行的是url链接:①在 cd /.scripts 目录下创建脚本 :    脚本文件格式 , 例如:curl.sh②在脚本中写入要执行的文件 :     /usr/bin/curl https://www.test.com/Test/test.php③命令crontab -e 里面定时执行指定的脚本 :    59 23 */2 * * /.scripts/curl.sh 该脚本的执行时间是每两天的23点59分执行

shell脚本—根据文件个数定时备份

最近在了解Jenkins时,出现这样一个问题:linux ext3系统目录下的子目录个数不能超过31998个(参考:http://www.xshell.net/linux/1267.html),但jenkins在不停的编译版本时,有时候几个小时就创建了30000多个日志文件夹的目录,从而要随时的清理此文件夹下的目录.于是就写了个脚本来实现自动备份功能.由于很久没有接触过shell,所以花了一天来实现,比较汗颜!主要是对shell的格式,语法之类的不是很了解,在网上找了些资料,边写边调试!废话不多

在Linux中定时执行一个程序的方法之at命令

/*********************************************************************  * Author  : Samson  * Date    : 04/29/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

VBA定时执行某程序

在工作中我们经常需要定时执行某程序,或者有时需要每隔特定时间执行某个程序,例如我们需要每15分钟执行一次保存的动作,这个功能在VBA中是通过Application.OnTime函数来实现的.这个函数有两个参数,一个是执行程序的时间,另一个是要执行的程序名称.下面来看一代简单代码 Sub macro1()Dim NewTime As DateNewTime = Now + TimeValue("00:00:05")Application.OnTime NewTime, "Mac

shell脚本定时执行php程序

首先写好你需要执行的php程序 我这里呢就是一个PDO链接 写入一个时间 然后我们写一个shell脚本来执行这个php程序 就单纯的一个执行php程序的shell就写好了,然后咱们运行一下 好,显示插入成功,证明这个shell是可以执行的. 然后咱们写一个crontab的定时任务 然后介绍一下五个星星分别表示什么: minute - 分钟 ,从0到59之间的任何整数 hour - 小时, 从0到23之间的任何整数 day - 天, 从1到31之间的任何整数(如果指定了月份,必须是该月份的有效日期

Shell脚本中的多任务并发执行

正常情况下,Shell脚本中的命令是串行执行的,当一条命令执行完才会执行接下来的命令.比如下面这段代码: #!/bin/bash for i in {1..10};do echo $i done echo "END" 执行结果: 1 2 3 4 5 6 7 8 9 10 END 可以看到,循环体中的"echo $i"命令是串行执行的.但是如果所执行的命令耗时比较长,这就会导致整个程序的执行时间非常长,甚至可能导致程序执行时卡在那里,长时间失去响应.比如我们需要完成这

解决命令行执行shell脚本成功,但crontab执行失败

实际生产案例 生产机房自建PPTP客户端通过拨号连接到生产机房,但是一旦客户端网络是意外断线再重新拨号 会产生IP冲突,于是写了一个脚本监控PPTP的IP是否有多个(一般冲突以后会生成2个IP) #!/bin/bash #author Liuyueming . /etc/profile #开始没有加这个环境变量 for i in {10..35} do n=`ifconfig|grep 10.13.0.${i}|wc -l` #循环取ip并计数 # echo `ifconfig|grep 10.

Shell脚本实现 tomcat 日志定时切割

日志切割的意义: 在生产环境中,当我们使用tomcat服务时,如果用户量过多,有没有日志切割,将会产生很大的日志,一天的日志都能有好几个G大小.当我们需要查看日志记录时,非常麻烦.因此,日志切割是很有必要的! 1.编写shell脚本 vim fengelog.sh #脚本声明 #!/bin/bash . /etc/profile . ~/.bash_profile #定义日志文件目录 applog_path=/usr/local/apache-tomcat-app/logs sapplog_pa

ubuntu 下使用crontab定时执行java程序

题记 之前使用solr进行全文检索,涉及到检索更新问题,这里采用定时更新方法,现在使用的系统为ubuntu,因此考虑crontab. 解决思路 一.准备工具 打包java程序jar 安装crontab 二.编写crontab 脚本 过程 一.工具准备 1,制作jar包,可以通过java jar命令,也可以通过eclipse工具. 2.安装crontab ubuntu上安装比较方便: sudo apt-get install crontab 二.编写crontab脚本 1.认识crontab Cr