通过定时任务搭配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 脚本文件名称赋权.