2013-03-26 17:11:29 javaweiming 阅读数 2577

   引言:前段时间写了个脚本,用来定时备份数据库的 ,后来定时任务也添加了,结果却要求写个脚本去添加定时任务,哎...当时真是一头雾水!后来请教了下高人,得以解决。下面我们来看到脚本。

 

#!/bin/bash
myscript=resume_backup.sh
filePath=$(cd "$(dirname "$0")";pwd)
echo $filePath
crontab -l > cron
number=`grep -n "$myscript" cron | cut -d ":" -f 1`
aa=$number
echo $aa
if [ -z $aa ];
then
echo "该任务不存在,将添加"
echo '1 12 * * * '$filePath'/'$myscript'' >> cron
crontab cron
rm -f cron
else
echo "该任务已经存在,将会先删除再添加"
sed -i '/'$myscript'/d' cron
echo '0 0 * * 0 '$filePath'/'$myscript'' >> cron
crontab cron
rm -f cron
fi

    这个脚本的大致功能就是,首先去判断任务是否已经存在,存在的话就先删除,再去添加,不存在就直接添加了。

  

  代码解释:crontab -l > cron  这行就是将定时任务写到一个中间文件中,方便下面对定时任务的操作。

                  number=`grep -n "$myscript" cron | cut -d ":" -f 1`  这个是获得$myscript在cron中所在的行数。

                  if [ -z $aa ]; 判断aa是否为空。

                  echo '1 12 * * * '$filePath'/'$myscript'' >> cron 将 '1 12 * * * '$filePath'/'$myscript'' 写到 cron中去。

                  crontab cron  将cron中的内容写到定时任务中去(全部覆盖)。

                  sed -i '/'$myscript'/d' cron  从cron中删除包含$myscript的行。

                   rm -f cron  删除中间文件cron。

       

       脚本很强大,永远保持一颗学习脚本的心!!! 

                   

                 


 

2019-10-17 10:19:38 dreamwbt 阅读数 19

第一步:
        编写脚本文件,假设为cacheclean.sh

第二步:
        脚本加入到定时任务,时间表达式cron自己找资料修改

echo '0 0 2/2 * * ?  sh /opt/script/cron/cacheclean.sh' >> /var/spool/cron/root

 

2019-02-23 14:53:58 qq_41969358 阅读数 6031

linux下设置定时执行脚本


1.首先安装所需程序并启动
crontabs是设置周期性被执行的指令

    yum install vixie-cron
    yum install crontabs
    service crond start
    service crond stop
    service crond status

出现以下信息则表示crond启动成功

● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-02-15 02:13:57 EST; 1 weeks 0 days ago
 Main PID: 94183 (crond)
    Tasks: 1
   Memory: 344.0K
   CGroup: /system.slice/crond.service
           └─94183 /usr/sbin/crond -n

2.将crond加入开机启动
就是把service crond start加入开机启动脚本
开机启动脚本可以参考我的另一篇博客:https://blog.csdn.net/qq_41969358/article/details/87798908

3.添加定时任务
vi /etc/crontab,例如设置每天晚上12点重启服务器
tip:定时任务失败很多时候都是crontab时间格式错误

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- 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
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
  0 0  *  *  * root reboot

4.添加完定时任务后,重启crond,使改动生效

service crond restart

5.查看是否生效
实时查看crontab执行内容

tail -f /var/log/cron

通过系统日志来查看Cron任务是否有执行过

grep "reboot" /var/log/cron
2018-04-02 16:12:59 winterfeng123 阅读数 2643

使用linux下的crontab定时任务跑定时脚本

tags:定时任务 定时脚本 crontab linux定时脚本 linux


引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的。我们这次就来说一下定时脚本的那些事,其实网上教程多得很,我就来蹭一下热度吧。

crond

我们经常用windows,但是估计很多人都不知道windows下面有一个计划任务,可以定时的执行一些任务。其实windows下面有好多小功能,对于程序员来说很有用,比如创建一个批处理可以帮助我们一次性打开我们需要的所有环境软件,定时任务可以定时备份数据库等等。

同样的 在linux下也有用来周期性执行任务的工具,它就是crond。它会随linux一起安装,并默认自动启动。它定时执行的最小粒度是1分钟,也就是说crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
它的代码如下

#crontab -u <-l, -r, -e>
Options:
 -u <user>  define user //指定一个用户
 -e         edit user's crontab //编辑某个用户的任务
 -l         list user's crontab //列出某个用户的任务计划
 -r         delete user's crontab //删除某个用户的任务
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x <mask>  enable debugging

检查服务是否在运行

```linux

sevice crond status //如果输出的有个"active(running)"(这两个单词是绿色的,上面一行还有个小绿点)证明正在运行中
sevice crond start //如果没有运行这个命令可以启动

service crond stop //关闭服务

service crond restart //重启服务

service crond reload //重新载入配置

```

创建一个定时任务

可以通过crontab -e命令来编辑定时任务,也可以直接编辑文件。文件位置有两个

  1. 系统配置文件(主配置文件)位置 /etc/crontab
  2. 用户配置文件位置/var/spool/cron,文件名和此用户同名,此用户的cron信息都记录在这个文件中
    打开后大概这个样子
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- 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
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

不得不佩服人家用文档都能写出图片的效果来。看上图已经很明白了

格式为:
分 小时 每个月的哪一天 月 每周的哪一天 用户名(可省略) 要执行的命令

  • “*” 代表取值范围内的数字
  • “/” 代表”每”
  • “-” 代表从某个数字到某个数字
  • “,” 分开几个离散的数字
    比如我们拿定时执行pwd和一个php脚本来说明

    
    20 6 * * * pwd 每天的 6:20 执行pwd命令
    20 6 8 6 * pwd 每年的686:20执行pwd命令
    20 6 * * 0 pwd 每星期日的6:20执行pwd命令//注:国外周日是第一天 0表示星期天,1表示星期1,或按照上面代码中写引文。
    //字符用法
    20 3 10,20 * * pwd 每月10号及20号的320执行pwd命令(注:“,”用来连接多个不连续的时段)
    25 8-10 * * * pwd 每天8-10点的第25分钟执行pwd命令(注:“-”用来连接连续的时段)
    */15 * * * * pwd15分钟执行一次pwd命令 (每个小时的第15 20 45 60分钟执行pwd命令)
    20 6 */10 * * pwd 每个月中,每隔106:20执行一次pwd命令(这个好像用的很少,每隔几天的不知道怎么写,实在不行可以多建立几个,我也没用到过,如果有用到多的欢迎补充)
    
    下面来一个执行php脚本的例子(敲黑板,划重点了)
    
    //和命令行中执行php文件是一样的(如果你用的是框架 还支持路由哦)脚本里面想干啥就干啥
    */15 * * * * /opt/app/php-5.5/bin/php /data/www/我是项目目录/index.php 我是脚本目录/我是执行的文件
    
    

查看日志

/var/log/cron.log这个文件就可以,可以用tail -f /var/log/cron.log动态观察,也可以用cat或者导出文件查看均可

简单教程到此结束,如果需要更高级的应用,就需要自己动手了。

              ---还有一句老话,欢迎评论交流
没有更多推荐了,返回首页