通过定时任务搭配shell脚本,可以达到定时监控/备份等目的
1.定时任务查询相关命令
命令 | 含义 |
crontab -l | 查询系统的定时任务列表 |
crontab -e | 编辑定时任务,可以通过这个命令去取消某个定时任务 |
crontab -r | 取消所有定时任务 |
ps -aux|grep cron | 查询定时任务进程是否开启 |
service crond status | 查看crontab服务状态 |
service crond start | 启动crontab服务 |
service crond stop | 关闭crontab服务 |
service crond restart | 重启crontab服务 |
service crond reload | 重载crontab服务配置 |
2.定时任务的新增
1)在命令行输入: crontab -e 然后添加相应的任务,wq保存退出,会自动保存到/var/spool/cron文件中。
2)编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
注意:这两种方式都能达到目的,可以不需要纠结细节.
要说这两者的区别,那就是:/var/spool/cron/user 按照系统的用户来区分定时任务,而/etc/crontab是系统执行的定时任务
#定时任务(cron)配置文件的写法
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (星期中,0表示周日)
#特殊的符号解释
*代表取值范围内的数字
/代表”每”
-代表从某个数字到某个数字
,分开几个离散的数字
#具体编写案例
#每五分钟执行一次a.sh脚本命令
*/5 * * * * /usr/servant/a.sh
# 每天7:07以root 身份执行/etc/cron.daily目录中的所有可执行文件
7 7 * * * root run-parts /etc/cron.daily #run-parts参数表示,执行后面目录中的所有可执行文件
3.监控重启某个进程的shell脚本
shell是一个用C语言编写的程序,用户使用linux的桥梁.
shell脚本(shell script)是为shell编写的脚本程序,linux能识别shell脚本并执行.shell脚本通常以.sh为后缀来标识.
#!/bin/sh
process_name="a.jar" #shell变量赋值,定义变量process_name(jar包名称).不能有空格
log_name="/home/servant/cron.log" #单纯的shell变量赋值,定义变量log_name(日志路径)
#定义函数,用于获取a.jar这个程序linux上的运行数量
process_count()
{
count=`ps -ef|grep ${process_name}|grep -v grep|wc -l` #${变量名}获取变量的值,{}可省略
return $count
}
#定义函数,用于获取进程号
process_id()
{
pid=`ps -ef|grep $process_name | grep -v grep | awk '{print $2}'`
}
#指定函数(无参数,如需要传递参数,可以在函数名后面直接加,函数里面用$1获取第一个参数,$2获取第二个参数)
process_count
result_count=$? #$?表示最后运行的命令的结束代码(返回值)
if [ $result_count -eq 0 ] #判断进程是否存在. -eq判断是否相等,if与[]之间是有空格的
then
java -jar /home/servant/servant.jar #执行启动项目进程
process_id #获取新进程号
echo ${pid},`date` >> $log_name #将新进程号和启动时间追加输出到日志路径
fi #结束if命令
4.mysqldump方式备份mysql数据
#!/bin/sh
mysqldump -u用户名 -p密码 db_name(数据库名)
--skip-extended-insert #备份的时候记录分行显示
--ignore-table=db_name(数据库名).table_name(表名) > /usr/backup/db_name(数据库名).sql #备份时排除特定数据库的特定表,并将结果 输出到/usr/backup/db_name.sql这个路径
echo '备份成功!' #执行成功后提示备份结果
5.脚本未执行生效常见原因
如果脚本编写完成并加入到了服务器的定时任务中,没有执行. 原因如下:
1.脚本里面语法有问题,执行出错
2.脚本文件没有赋予执行权限,如要chmod +x 脚本文件名称赋权.