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分钟)
- /scripts/script.sh; /scripts/scrit2.sh #多个任务在一条命令中配置
-
-
-
查看是否写入
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 &