一.  CentOS 7 定时计划任务设置

概述 

  就像再windows上有计划任务一样,centos7 自然也有计划任务,而且设置更为灵活,好用。再centos7 上可以利用crontab 来执行计划任务, 依赖与 crond 的系统服务,这个服务是系统自带的,可以直接查看状态,启动,停止。 
 

安装 crontabs服务并设置开机自启

yum install crontabs 
systemctl enable crond (设为开机启动) 
systemctl start crond(启动crond服务) 
systemctl status crond (查看状态) 

设置用户自定义定时任务

vi /etc/crontab 
可以看到: 
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 

即: 
分钟(0-59) 小时(0-23) 日(1-31) 月(11-12) 星期(0-6,0表示周日) 用户名 要执行的命令

  • */30 * * * root /usr/local/mycommand.sh (每天,每30分钟执行一次 mycommand命令)
  • * 3 * * * root /usr/local/mycommand.sh (每天凌晨三点,执行命令脚本,PS:这里由于第一个的分钟没有设置,那么就会每天凌晨3点的每分钟都执行一次命令)
  • 0 3 * * * root /usr/local/mycommand.sh (这样就是每天凌晨三点整执行一次命令脚本)
  • */10 11-13 * * * root /usr/local/mycommand.sh (每天11点到13点之间,每10分钟执行一次命令脚本,这一种用法也很常用)
  • 10-30 * * * * root /usr/local/mycommand.sh (每小时的10-30分钟,每分钟执行一次命令脚本,共执行20次)
  • 10,30 * * * * * root /usr/local/mycommand.sh (每小时的10,30分钟,分别执行一次命令脚本,共执行2次)

保存生效

加载任务,使之生效:crontab /etc/crontab

查看任务:crontab -l 
$ crontab -u 用户名 -l (列出用户的定时任务列表)

PS:特别注意,crond的任务计划, 有并不会调用用户设置的环境变量,它有自己的环境变量,当你用到一些命令时,比如mysqldump等需要环境变量的命令,手工执行脚本时是正常的,但用crond执行的时候就会不行,这时你要么写完整的绝对路径,要么将环境变量添加到 /etc/crontab 中。

好了,计划任务就是这么简单了,但是计划任务,执行的语句如果是多条,则需要用药shell脚本,自己先写一个shell脚本,然后在计划任务中,执行这个脚本即可。至于shell脚本的写法, 这里不赘述。

-----------------------------------------------------------------分割线---------------------------------------------------------------------------------------------

二.  Linux判断进程是否存在并启动该进程

服务器上运行了一些小工具属于非服务类的,程序进程本身不是很稳定总是异常关闭写个脚本监视它,判断进程是否存在并启动该进程。

1.Linux判断进程是否存在并启动该进程


 

1. #!/bin/bash
2. #判断进程是否存在,如果不存在就启动它
3. PIDS=`ps -ef |grep myprocess |grep -v grep | awk '{print $2}'`
4. if [ "$PIDS" != "" ]; then
5. echo "myprocess is runing!"
6. else
7. cd /root/
8. ./myprocess
9. #运行进程
10. fi

2.linux判断进程是否存在并重启该进程


 

1. #!/bin/bash
2. #判断进程是否存在,如果不存在就启动它如果存在就重启它
3. PIDS=`ps -ef |grep myprocess |grep -v grep | awk '{print $2}'`
4. if [ "$PIDS" != "" ]; then
5. kill -9 $PIDS
6. #先关闭进程,在运行此进程
7. cd /root/myprocess
8. sudo ./myprocess
9. #重新运行进程
10. else
11. cd /root/myprocess
12. sudo ./myprocess
13. #运行进程
14. fi

最后编辑crontab -e 按需要设置运行时间。

-------------------------------------------------------------分割线---------------------------------------------------------------------------------------------------三. springboot项目在linux服务器上启动、停止脚本

xxxx.sh

#!/bin/bash
 cd `dirname $0`
 CUR_SHELL_DIR=`pwd`
 CUR_SHELL_NAME=`basename ${BASH_SOURCE}`
 #修改这里jar包名即可
 JAR_NAME="xxxxxxxxxxxx.jar" 
 JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME
 #JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
 JAVA_MEM_OPTS=""
 #SPRING_PROFILES_ACTIV="-Dspring.profiles.active=eureka2"
 SPRING_PROFILES_ACTIV=""
 LOG_DIR=$CUR_SHELL_DIR/logs
 LOG_PATH=$LOG_DIR/${JAR_NAME}.log
 echo_help()
 {
     echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
 }
 if [ -z $1 ];then
     echo_help
     exit 1
 fi
 if [ ! -d "$LOG_DIR" ];then
     mkdir "$LOG_DIR"
 fi
 if [ ! -f "$LOG_PATH" ];then
     touch "$LOG_DIR"
 fi
 if [ "$1" == "start" ];then
 # check server
     PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
     if [ -n "$PIDS" ]; then
         echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
         exit 1
     fi
 echo "Starting the $JAR_NAME..."
  
     # start
     nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
  
     COUNT=0
     while [ $COUNT -lt 1 ]; do
         sleep 1
         COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
         if [ $COUNT -gt 0 ]; then
             break
         fi
     done
     PIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
     echo "${JAR_NAME} Started and the PID is ${PIDS}."
     echo "You can check the log file in ${LOG_PATH} for details."
  
 elif [ "$1" == "stop" ];then
  
     PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
     if [ -z "$PIDS" ]; then
         echo "ERROR:The $JAR_NAME does not started!"
         exit 1
     fi
 echo -e "Stopping the $JAR_NAME..."
  
     for PID in $PIDS; do
         kill $PID > /dev/null 2>&1
     done
  
     COUNT=0
     while [ $COUNT -lt 1 ]; do
         sleep 1
         COUNT=1
         for PID in $PIDS ; do
             PID_EXIST=`ps --no-heading -p $PID`
             if [ -n "$PID_EXIST" ]; then
                 COUNT=0
                 break
             fi
         done
     done
  
     echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
 else
     echo_help
     exit 1
 fi
  以上代码只需修改jar包名即可使用启动jar包:
 ./xxxx.sh start
  
 停止 jar包./xxxx.sh  stop
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------