添加定时任务
host_crontab.sh
sudo用户使用crontab -e 就可以打开vim,输入要执行的任务保存退出就可以添加任务直接启动运行了。
但在应用运行阶段,需要使用shell方式添加crontab ;
执行crontab -e命令会在/var/spool/cron下创建一个文件,这个文件的名称就是当前用户名,内容就是你添加的任务具体内容;
#!/bin/bash
CRON_FILE="/var/spool/cron/admin"
if [ ! -f -$CRON_FILE ];then
echo "$CRON_FILE not exist ;"
sudo sh -c 'echo "*/1 * * * * sh /home/admin/appname/bin/xx.sh > /dev/null 2>&1 " > /var/spool/cron/admin'
else
if [ `grep -c "vipsrv" $CRON_FILE` -eq '0' ];then
sudo sh -c 'echo "*/1 * * * * sh /home/admin/appname/bin/xx.sh > /dev/null 2>&1 " >> /var/spool/cron/admin'
fi
fi
ps1: sudo echo > 命令报错 Permission denied ;
这是因为重定向符号 “>” 和 “>>” 也是 bash 的命令。我们使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 “>>” 命令也具有 root 权限,所以 bash 会认为这两个命令都没有文件写入信息的权限。
解决这一问题可以利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:
$ sudo sh -c ‘echo "hello" >> test.asc’
ps2: shell中 -eq,-ne,-gt,-lt,-ge,-le数字比较符
-eq //equals等于
-ne //no equals不等于
-gt //greater than 大于
-lt //less than小于
-ge //greater equals大于等于
-le //less equals小于等于
ps3 :常用命令
crontab -e 编辑
crontab -r 删除
crontab -l 查看
查看cron运行记录 sudo tail -200f /var/log/cron
host.sh
#!/bin/bash
proxy_host="xxx"
ping -c 1 $proxy_host
#if [ $? -eq 0 ]; then
# nothing to do .
# echo "$(date +"%Y-%m-%d %H:%M:%S") ping $proxy_host success!" >> /home/admin/logs/xx.log
#else
if [ $? -ne 0 ]; then
sudo service xxx restart
echo "$(date +"%Y-%m-%d %H:%M:%S") ping $proxy_host fail , restart immediately !" >> /home/admin/logs/xx.log
fi
ps4 :source命令
source命令也称为“点命令”,也就是一个点符号".",是bash的内部命令。
功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句。
source filename 与 sh filename的区别
1.sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
2.source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
p5:2>&1的作用
> 和>>都是重定向输出习惯上
标准输入(standard input)的文件描述符是 0
标准输出(standard output)是 1
标准错误(standard error)是 21> 指标准信息输出路径(也就是默认的输出方式)
2> 指错误信息输出路径
2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)
p6:shell service command not found
直接在console上执行是没有问题的, 但是用shell就会报错;
解决方法,使用service的绝对路径
sudo /sbin/service vipsrv restart

浙公网安备 33010602011771号