添加定时任务

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)是 2

1> 指标准信息输出路径(也就是默认的输出方式)
2> 指错误信息输出路径
2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)

p6:shell service command not found
直接在console上执行是没有问题的, 但是用shell就会报错;
解决方法,使用service的绝对路径
sudo /sbin/service vipsrv restart

posted @ 2023-07-12 16:05  北feng  阅读(50)  评论(0)    收藏  举报