crontab定时任务
1、定时任务的位置
vim /etc/crontab
2、定时任务详解
minute hour day of month month day of week username command
分钟 小时 日期(月份的第几天) 月份 日期(一周的第几天) root (用户) 执行的命令
对于以上各语句,星号(*)表示所有可用的值。例如*在指代month时表示每月执行(需要符合其他限制条件)该命令。
整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4
指定数值由逗号分开。如:3,4,6,8表示这四个指定整数。
符号“/”指定步进设置。“/<interger>”表示步进值。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。
以“#”开头的为注释行,不会被执行。
0 3 * * * /home/dbbackup/db1backup.sh backup
0 4 * * * /home/dbbackup/db2backup.sh backup
表示每天3点执行/home/dbbackup/db1backup.sh backup,4点执行/home/dbbackup/db2backup.sh backup,如果是每五分钟执行一次可改为:
*/5 * * * * /home/dbbackup/db2backup.sh backup
如果一个cron任务需要定期而不是按小时,天,周,月来执行,则需要添加/etc/cron.d目录。这个目录下的所有文件和文件/etc/crontab语法相同
3、任务的修改
查看任务:crontab -l
修改任务:crontab -e 修改 crontab 文件. 如果文件不存在会自动创建。
删除任务:crontab -r : 删除 crontab 文件。crontab -ir : 删除 crontab 文件前提醒用户。
* * * * * root
-------------------------------------------下面内容转载自网络------------------------------------
背景:不知道什么原因脚本手动执行:正常;crontab执行不生效;
总结原因:
1.shell脚本中绝对路径问题(尤其是生成文件路径)
2.crontab的环境变量问题(尤其是命令调用路径)
用下面的脚本解析以上两个问题:
----------------------------------------------------------
[root@monitor2 scripts]# cat cron.sh
#!/bin/sh
# func : 远程登录MySQL执行SQL语句,返回结果导入日期结尾的文件,每分钟执行一次脚本
user='admin'
pswd='admin'
host='10.10.60.108'
port=4001
MYSQL_CMD="mysql -u${user} -p${pswd} -h${host} -P${port}" # 远程登录命令,直接调用mysql命令。
SQL="SELECT VERSION();"
time_mark=`date '+%Y%m%f%H%M%S'`
#filedir="/data/scripts" # 生成文件的绝对路径
filename="version_${time_mark}.txt" # 直接指定文件名字
${MYSQL_CMD} -e"${SQL}" >${filename} # 直接写入指定的文件中 取决于上面filename变量
--------------------------------------------------------
以上是脚本内容!!!
--------------------------------------------------------
计划任务:
*/1 * * * * /bin/sh /data/scripts/cron.sh
--------------------------------------------------------
解析问题:
【shell脚本中绝对路径问题】
1.在脚本所在目录下:/data/scripts/手动执行以上脚本(不是绝对路径文件)
命令:./cron.sh
结果:正常生成文件
-rw-r--r--. 1 root root 26 Jan 10 12:13 version_20170110121326.txt
-rw-r--r--. 1 root root 26 Jan 10 12:13 version_20170110121344.txt
2.crontab执行脚本
观察:
[root@monitor2 scripts]# tailf /var/log/cron
Jan 10 12:17:01 monitor2 CROND[524]: (root) CMD (/bin/sh /data/scripts/cron.sh)
结果:计划任务照常执行,但是不会生成文件
3.修改脚本,生成文件是绝对路径
脚本:
filedir="/data/scripts" # 生成文件的绝对路径:开启
filename="${filedir}/version_${time_mark}.txt" # 直接指定文件名字:绝对路径了
运行:手动执行,正常生成文件
运行:计划任务运行,正常生成文件
【crontab的环境变量问题】
1.脚本中:直接使用mysql命令
命令:手动执行脚本,正常输出文件。因为:/etc/profile 中加入 了系统环境变量:/usr/local/mysql/bin/
2.crontab执行:如果想成功执行
分两种情况:
1.脚本中mysql命令指定绝对路径:/usr/local/mysql/bin/mysql
2.将mysql可执行文件复制到:crontab的环境变量指定的路径中
------------------------------------------------------
# crontab的配置文件!!!
------------------------------------------------------
[root@monitor2 scripts]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin # 将mysql可执行文件复制到/usr/bin下,脚本中就可以直接使用mysql命令
MAILTO=root
HOME=/
# 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
-------------------------------------------------------------
!查看:cron的log日志文件:
tailf /var/log/cron
!重启crond服务:
service crond restart
总结:
脚本中涉及文件和命令的使用最好都用上绝对路径!!!
脚本中涉及文件和命令的使用最好都用上绝对路径!!!
脚本中涉及文件和命令的使用最好都用上绝对路径!!!
--------------------------------------------------------------
20180912学习补充
------------------------------------------------------------------------------------------------
1、相关工具
Git Bash 模拟Linux命令行,自带强大的命令库。
curl http://www.baidu.com //获取百度网页的源代码
Terminal(Linux,MacOS) 系统原生,操作简单
2、安装crond服务
yum clesan all //清楚yum源缓存
yun update //更新yum安装包到最新版本
yum install -y cronie crontabs //安装crontab
3、检查crond服务是否安装及启动
yum list cronie && systemctl status crond
检查crontab工具是否安装
yum list crontabs && which crontab && crontab -l
4、crontab 架构
* * * * * my Command //分,时,日,月,周 全部使用*指每分钟
*指每分钟,*/5(每5分钟),2-10代表2到10分钟内,1,5,10(代表第1,5,10分钟执行)
5、crontab 设置
vim /ect/crontab //root任务可以直接在这里进行添加
crontab -e是添加当前用户的定时任务。实际任务写入到/var/spool/cron/root(当前用户的文件)
6、crontab 环境变量
添加PATH到/etc/crontab
PATH=/sbin:/bin:/usr/sbin:/usr/bin //添加到这后面,这样在crontab就可以使用添加的环境变量的语言环境
在执行具体任务前引入系统/用户环境变量(推荐)
30 2 * * * sourc /etc/profile;sh /root/test.sh
30 2 * * * source ~/.bash_profile;sh /root/test.sh
systemctl restart crond // 让操作生效
//添加需要添加的系统环境变量到/etc/profile(系统级别) 和.bash_profile(用户级别)
7、crontab命令行
crontab -e 编辑crontab任务 systemctl restart crond 重启crond使得任务生效
crontab -l 查看crontab任务 /var/spool/cron/root 查看用户级别的crontab任务
8、cron日志保存在系统目录/var/log/cron
tail -n 2 /var/log/cron
9、crontab实战
用crontab定期清除系统日志
cd /var/log 下有大量的系统日志
du -sh * //查看日志文件磁盘大小
* 1 * * * cat /dev/null > /var/log/messages // /dev/null是一个空文件,重定向到messages这个日志文件,等于清空了messages
10、crontab备份source code //备份项目源代码
#!/bin/sh
basedir=/root/data/backup
www_src=$basedir/www_src/$(date +%F_%H%M)
[ ! -d "$www_src" ] && mkdir -p $www_src
cd /root/data
echo $www_src
tar -jpcf $www_src/www.tar.bz2 www
11、iptables系统防火墙
systemctl status firewalld // 看防火墙的状态
systemctl disable firewalld // 禁用防火墙
systemctl stop firewalld // 停止防火墙
yum install iptables-services // 安装iptables服务
systemctl enable iptables // 开启iptables服务
systemctl start iptables // 启动iptables服务
iptbales -V // 查看iptbales的版本
#!/bin/sh
iptables -F
list=/root/data/script/blacklist.txt
for line in 'cat $list';do
iptables -I INPUT -s$line -j DROP
echo "$line is dropped into blacklist"
done
iptables -nvl 查看iptabls上面的黑名单ip
12、crontab在jenkins上的扩展
jenkins用java编写的开源持续运维工具,jenkins上的扩展
yum install jenkins
yum 安装jenkins方法
1、下载依赖
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
2、导入秘钥
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
3、安装
yum install jenkins #等待安装时间较长,约25min
修改jenkins的配置文件,修改/etc/init.d/jenkins配置文件中,condidates下java的jdk的路径,使得符合实际的使用路径
systemctl start jenkins//启动jenkins
systemctl status jenkins//看jenkins的启动状态
lsof -i:8080//查看8080端口jenkins是否启动
http://192.168.189.128:8080//登录jenkins的主页,可以看到如下页面
为了确保管理员安全地安装jenkins,密码已写入到日志中(不知道在哪里?)该文件在服务器上:
/var/lib/jenkins/secrets/initialAdminPassword
到这个文件下获取密码进行登录。

浙公网安备 33010602011771号