定时任务之执行shell脚本

crontab命令

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
命令功能:
通过crontab命令,我们可以在固定的间隔时间执行指定的系统指令或shellscript脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。
https://baike.baidu.com/item/crontab/8819388?fr=aladdin

Linux之crontab -e定时任务

inux内置的cron进程能帮我们实现这些需求,cron搭配shell脚本
我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件:
/var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
在这里插入图片描述
/etc/crontab 这个文件负责调度各种管理和维护任务
在这里插入图片描述
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ //使用者运行的路径,这里是根目录
run-parts 注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本

/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本
我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次

   分     小时    日       月       星期     命令
  0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)
   Minute  Hour   Day    Month   Dayofweek   command
   分钟      小时      天     月        天每星期       命令

“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字

crontab命令选项:
-u指定一个用户
-l列出某个用户的任务计划,显示 crontab 文件
-r删除某个用户的任务(不添加用户即删除所有的任务), 删除 crontab 文件
-e编辑某个用户的任务,修改 crontab 文件. 如果文件不存在会自动创建

创建shell脚本

创建shell 脚本copy_test.sh,并将脚本存放在/etc/cron.d/目录下

cp:复制文件且按时间重新命名

#!/bin/bash
cp -rf old copy_test/new_`date '+%Y%m%d_%H.%M.%S'`

赋予copy_test.sh文件可执行权限。
命令:chmod -R 777 /etc/cron.d/copy_test.sh
sh copy_test.sh

添加定时任务

定时任务添加执行该脚本
crontab -e #编辑任务
输入:* */1 * * * command #每分钟执行一次
00 */1 * * * sh /etc/cron.d/copy_test.sh #每小时0分执行

          • /scripts/script.sh; /scripts/scrit2.sh #多个任务在一条命令中配置
            wq 保存任务并自启动(需要等待2-3分钟)

查看是否写入
crontab -l | grep mysql

enable表示已启用自启动,disable标识未启用自启动
systemctl is-enabled crond

如果未启用,则开启cron自启用
systemctl enable crond

如果已经启用,想要cron关闭自启动
systemctl disable crond

重启crontab服务让新配置的定时任务生效
systemctl status crond
systemctl start crond
systemctl stop crond
systemctl restart crond
systemctl reload crond #重新载入配置

查看日志
tail -f -n 200 /var/log/cron

定时任务执行次数

shell脚本

#!/bin/bash
if grep -q "search_word" sample.txt; then  
    echo 'word found!'  
else  
    echo 'word not found!'  
fi

统计当前目录下文件的数量
ls -l|grep ‘^-’|wc -l
统计当前目录下文件夹的数量
ls -lR|grep ‘^-d’|wc -l
查询当前路径下的指定前缀名的目录下的所有文件夹数量
ls -lR 20161124*/ | grep ^d | wc -l
查询指定文件夹下所有文件数量
ls -l /root/filesync_data/copy_test|grep ‘^-’|wc -l
查询指定目录下所有文件夹的数量(不包含文件夹下子目录)
ls -l /root/filesync_data/copy_test|grep ‘^d’|wc -l

#!/bin/bash
#ls -l /root/filesync_data/copy_test|grep '^d'|wc -l
#echo $file_num

file_num=0
while [ $file_num -lt 10 ]
#  echo $file_num
  do
    cp -rf /root/filesync_data/test_hourly /root/filesync_data/copy_test/test_`date '+%Y%m%d_%H.%M.%S'`
    sleep 10   #秒
    if [[ $file_num -ge 10 ]]
        then
        break
    fi
    let file_num+=1
done

后台运行脚本
./test.sh &

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值