×

定时执行脚本

定时执行脚本(PHP开发中,定时执行如何判断之前的脚本是否跑完)

admin admin 发表于2023-07-05 03:33:00 浏览38 评论0

抢沙发发表评论

本文目录

PHP开发中,定时执行如何判断之前的脚本是否跑完

最传统的做法是lockfile。

脚本开始执行时,判断是否存在一个指定的文件,这个文件称之为lockfile。

lockfile不存在,说明之前的脚本跑完了,创建该文件,继续执行,脚本执行结束时,删除该文件。

若lockfile存在,怎说明前一次的脚本没有结束。

实际应用中,脚本执行过程中发生异常时,也要删除lockfile。

crontab中如何实现每隔多少天执行一次脚本

1. # 下午6点到早上6点,每隔15分钟执行一次脚本0,15,30,45 18-06 * * * /bin/bash $HOME/script.sh 》 /dev/null 2》&1# 每两小时,重启一次服务* */2 * * * /etc/init.d/apache2 restart

下面是每隔多少分钟,每隔多少小时,每天/每周/每月/每年的crontab的归纳总结

  • 每五分钟执行     */5 * * * *

  • 每五小时执行     0 */5 * * *

  • 每天执行         0 0 * * *

  • 每周执行         0 0 * * 0

  • 每月执行         0 0 1 * *

  • 每年执行         0 0 1 1 *

  • 如果说是每个月的每隔10天来执行某个脚本的话,同样可以写成:

    ?

    12
  •    
  • # 每个月的1号,11号,21号,31号,执行HTTP服务重启0 0 */10 * * /etc/init.d/apache2 restart
  •    
  • 但如果是按自然天数,比如说每27天,执行一次脚本,这个要如何实现呢? 如果是这种情况,显然不能通过crontab直接实现,必须迂回实现。

    下面是能想到的两种方法。

    【方法一】通过脚本控制时间来实现

    思路: 

    1) 在脚本running.sh中设置要执行的次数,这里假如10次,每次间隔27天,script.sh为要执行的脚本

    2) 然后执行nohup bash running.sh &将其放置在后台让其自动执行

    【方法二】通过crontab间接实现

    思路:

    1) 每天定时执行running.sh脚本,再在脚本running.sh里面判断,当间隔时间满足条件时

    2) 执行script.sh脚本,同时修改上次执行时间,以便于下次执行

Linux crontab怎么定时执行任务

linux下定时执行任务的方法 【非原创,个人网上收集整理了一下】在LINUX中,周期执行的任务一般由cron这个守护进程来处理。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。一、cron在3个地方查找配置文件:1、/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件。二、/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR#sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * command to be executed三、/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。四、权限crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在用法如下:1、如果两个文件都不存在,则只有root用户才能使用crontab命令。2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。AIX 中 普通用户默认都有 crontab 权限,如果要限制用户使用 crontab ,就需要/var/adm/cron/cron.denyHP-UNIX 中默认普通用户没得crontab 权限 ,要想放开普通用户的crontab 权限可以编五、创建cron脚本第一步:写cron脚本文件,命名为crontest.cron。15,30,45,59 * * * * echo “xgmtest.....“ 》》 xgmtest.txt 表示,每隔15分钟,执行打印一次命令第二步:添加定时任务。执行命令 “crontab crontest.cron”。搞定第三步:“crontab -l“ 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本六、cron服务cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。/sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sbin/service crond restart //重启服务/sbin/service crond reload //重新载入配置/sbin/service crond status //查看服务状态crontab用法crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行。每个用户都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接创建或者直接修改。该crontab文件是通过crontab命令创建的在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:minute hour day-of-month month-of-year day-of-week commands合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)除了数字还有几个个特殊的符号就是“*“、“/“和“-“、“,“,*代表所有的取值范围内的数字,“/“代表每的意思,“/5“表示每5个单位,“-“代表从某个数字到某个数字,“,“分开几个离散的数字。-l 在标准输出上显示当前的crontab。-r 删除当前的crontab文件。-e 使用VISUAL或者EDITOR环境变量所指的器当前的crontab文件。当结束离开时,后的文件将自动安装。几个例子:每天早上6点0 6 * * * echo “Good morning.“ 》》 /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。每两个小时0 */2 * * * echo “Have a break now.“ 》》 /tmp/test.txt晚上11点到早上8点之间每两个小时和早上八点0 23-7/2,8 * * * echo “Have a good dream“ 》》 /tmp/test.txt每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点0 11 4 * 1-3 command line1月1日早上4点0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/每小时执行/etc/cron.hourly内的脚本01 * * * * root run-parts /etc/cron.hourly每天执行/etc/cron.daily内的脚本02 4 * * * root run-parts /etc/cron.daily每星期执行/etc/cron.weekly内的脚本22 4 * * 0 root run-parts /etc/cron.weekly每月去执行/etc/cron.monthly内的脚本42 4 1 * * root run-parts /etc/cron.monthly注意: “run-parts“这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。5,15,25,35,45,55 16,17,18 * * * command每周一,三,五的下午3:00系统进入维护状态,重新启动系统。00 15 * * 1,3,5 shutdown -r +5每小时的10分,40分执行用户目录下的innd/bbslin这个指令:10,40 * * * * innd/bbslink每小时的1分执行用户目录下的bin/account这个指令:1 * * * * bin/account每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。12,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txtat命令实现定时任务假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。at命令执行流程如下# at 2:05 tomorrowat》/home/kyle/do_jobat》 Ctrl+DAT Time中的时间表示方法-----------------------------------------------------------------------时 间 例子 说明-----------------------------------------------------------------------Minute at now + 5 minutes 任务在5分钟后运行Hour at now + 1 hour 任务在1小时后运行Days at now + 3 days 任务在3天后运行Weeks at now + 2 weeks 任务在两周后运行Fixed at midnight 任务在午夜运行Fixed at 10:30pm 任务在晚上10点30分注意:linux默认为不启动,而ubuntu默认为启动的。检查是否启动,用service atd检查语法,用service atd status检查atd的状态,用service atd start启动atd服务。查看at执行的具体内容:一般位于/var/spool/at目录下面, 用vi打开,在最后一部分就是你的执行程序参数详解-V : 印出版本编号-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入网络应用-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)-v : 列出所有已经完成但尚未删除的指定删除任务atrm 2三天后的下午 5 点锺执行 /bin/ls :at 5pm 3 days /bin/ls三个星期后的下午 5 点锺执行 /bin/ls :at 5pm 2 weeks /bin/ls明天的 17:20 执行 /bin/date :at 17:20 tomorrow /bin/date1999 年的最后一天的最后一分钟印出 the end of world !at 23:59 12/31/1999 echo the end of world !顶2踩0

在linux下怎么让一个脚本定时运行

Linux中,周期执行的任务一般由cron这个守护进程来处理  ps -ef | grep cron cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。

一、 cron在3个地方查找配置文件(设置shell脚本):

1、/var/spool/cron/yanggang 这个目录下存放的是每个用户(包括root)的crontab任务,每个任务以创建者的名字命名,比如用户tom建的crontab任务对应的文件是/var/spool/cron/tomyanggang@barry$ sudo ls -l /var/spool/cron/(或有时是 /var/spool/cron/crontabs/)

-rw------- 1 root     crontab 1071 2011-09-19 17:20 root

-rw------- 1 yanggang crontab 1176 2011-09-24 11:07 yanggang

一般一个用户最多只有一个crontab文件(如:root, yanggang等),其对应日志在/var/spool/mail/root(或/var/spool/mail/yanggang)文件里

2、/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/

# .---------------- minute (0 - 59) 

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... 

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)  OR

#sun,mon,tue,wed,thu,fri,sat 

# |  |  |  |  |

# *  *  *  *  *  command to be executed

例如:

*/5 * * * * root /usr/libexec/atrun

minute:代表一小时内的第几分,范围 0-59。 

hour:代表一天中的第几小时,范围 0-23。 

mday:代表一个月中的第几天,范围 1-31。 

month:代表一年中第几个月,范围 1-12。 

wday:代表星期几,范围 0-7 (0及7都是星期天)。 

who:要使用什么身份执行该指令,当您使用 crontab -e 时,不必加此字段。 

command:所要执行的指令。 

3、/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

Linux 使用crontab定时执行脚本,但是脚本内本该生成的临时数据文件全部没有生成

脚本里if ;then mkdir -p /stdata/zyz/; fi然后计划任务执行的时候sh -x yourshell &》logfile计划任务时间改成马上执行,看看日志里执行过程,这样来调试脚本计划任务是非登录模式运行,估计还是环境变量导致的,具体原因调试看日志

crontab能定时执行shell脚本吗

linux下使用crontab命令被用来提交和管理用户的需要周期性执行的任务,示例如下:crontab -e 周期任务30 21 * * * /etc/init.d/smb restart 每晚的21:30重启smbcrontab命令说明:crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。语法crontab(选项)(参数)选项-e:该用户的计时器设置;-l:列出该用户的计时器设置;-r:删除该用户的计时器设置;-u《用户名称》:指定要设定计时器的用户名称。参数crontab文件:指定包含待执行任务的crontab文件。

linux使用crontab实现PHP执行计划定时任务

首先说说cron,它是一个linux下的定时执行工具。根用户以外的用户可以使用crontab工具来配置cron任务。所有用户定义的crontab都被保存在/var/spool/cron目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个crontab项目,登录为该用户,然后键入crontab-e命令来该用户的crontab。该文件使用的格式和/etc/crontab相同。当对crontab所做的改变被保存后,该crontab文件就会根据该用户名被保存,并写入文件/var/spool/cron/username中。cron守护进程每分钟都检查/etc/crontab文件、etc/cron.d/目录、以及/var/spool/cron目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个crontab文件改变后就不必重新启动守护进程了。安装crontab:yuminstallcrontabs说明:/sbin/servicecrondstart//启动服务/sbin/servicecrondstop//关闭服务/sbin/servicecrondrestart//重启服务/sbin/servicecrondreload//重新载入配置查看crontab服务状态:servicecrondstatus手动启动crontab服务:servicecrondstart查看crontab服务是否已设置为开机启动,执行命令:ntsysv加入开机自动启动:chkconfig–level35crondoncrontab命令:功能说明:设置计时器。语  法:crontab补充说明:cron是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会计时器的配置文件,就可以使用计时器的功能。其配置文件格式如下:MinuteHourDayMonthDayOFWeekCommand参  数:-e 该用户的计时器设置。-l 列出该用户的计时器设置。-r 删除该用户的计时器设置。-u《用户名称》 指定要设定计时器的用户名称。crontab格式:基本格式:分钟  小时  日  月  星期  命令*       *     *   *    *      *第1列表示分钟1~59每分钟用*或者*/1表示第2列表示小时1~23(0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星期0~6(0表示星期天)第6列要运行的命令记住几个特殊符号的含义:“*”代表取值范围内的数字,“/”代表”每”,“-”代表从某个数字到某个数字,“,”分开几个离散的数字#Usethehashsigntoprefixacomment#+—————-minute(0–59)#|+————-hour(0–23)#||+———-dayofmonth(1–31)#|||+——-month(1–12)#||||+—-dayofweek(0–7)(Sunday=0or7)#|||||#*****commandtobeexecutedcrontab几个例子如下:(1)第一个例子。3021***/etc/init.d/nginxrestart每晚的21:30重启nginx。(2)第二个例子,也就是本教程测试的例子*****/usr/bin/php-f/root/test.php》》test.log每一分钟执行/root/test.php文件,将结果输出到test.log中。完成了上面基础工作后,就来看看怎么使用crontab定时执行PHP脚本:(1)我在/root下新建test.php文件,内容如下:复制代码代码如下:《?php       #!/usr/bin/php-q       echo date(’Y-m-dH:i:s’).“from

crontab怎么定时运行重启脚本

用计划任务自动运行.BAT批处理文件,在BAT文件中加入》、》》输出重定向命令将一条命令或某个程序输出结果的重定向到特定文件中, 》 与 》》的区别在于,》会清除调原有文件中的内容后写入指定文件,而》》只会追加内容到指定文件中,而不会改动其中的内容。比如sqlplus命令或者别的SQL命令后面加入 》》D:\sql.log则将SQL语句执行情况写到D盘下SQL.log文件下(不覆盖,追加,可以理解为所有的日志都在这个文件里面)如果后面加 》D:\sql.log 就是覆盖日志,只记录最后一次执行的情况;