Shell

输入输出重定向

我们在后台挂在jar包时,常使用过一个命令:nohup java -jar xxx.jar > java.log 2>&1 &

这里就有几个知识点:

  1. 末尾的 & 代表后台默认启动,页面关闭后,程序终止。
  2. 头部的 nohup 表示页面关闭后,后台仍继续运行,如果没有指定日志文件,则默认将输出重定向到nohup.log文件
  3. java -jar xxx.jar最基本的启动jar包
  4. > java.log 将运行jar包后的输出日志文件重定向到 java.log文件中
  5. 2>&1将标准输出与标准错误输出合并,在当前语义下就是将所有信息输出到 java.log文件。
    1. 如果只写 > 表示只将正常输出重定向到log文件中,错误信息直接显示页面
    2. 如果写 2> 表示只将错误输出重定向到log文件中,正常信息直接显示页面
  6. > 默认表示重定向,并覆盖原来内容
  7. >> 表示以追加的方式重定向

这样我们就可以监控到后台运行程序的日志信息了。

shell脚本保证程序运行

需求:当我们将项目挂在到服务器中,可能过一会儿服务就挂机了,我们可能还不知道请求,就需要一个脚本定时的去监控,程序是否仍在运行中。

#!/bin/sh
lsof -i:8080
renren=$?
lsof -i:82
getaway=$?
lsof -i:9001
manager=$?
lsof -i:8001
back=$?
#echo "'renren:', ${renren}"
#echo "'getaway:',${getaway}"
#echo "'manager:',${manager}"
#echo "'back:',${back}"
# 判断项目文件都是否都正产运转,如果没有运转,则进行记录日志,并重新启动服务
if [ ${back} != 0 ]
then
        cd /project/qiyuan/dist
        echo "$(date +%F%n%T), server restart" >> renre.log
        nohup node server.js >> renre.log 2>&1 &
        fi
if [ ${renren} != 0 ]
then
        cd /project/qiyuan/java
        echo "$(date +%F%n%T), server restart" >> renren.log
        nohup java -jar renren-fast.jar >> renren.log 2>&1 &
fi
if [ ${getaway} != 0 ]
then
        cd /project/qiyuan/java
        echo "$(date +%F%n%T), server restart" >> getaway.log
        nohup java -jar getaway-0.0.1-SNAPSHOT.jar >> getaway.log 2>&1 &
fi
if [ ${manager} != 0 ]
then
        cd /project/qiyuan/java
        echo "$(date +%F%n%T),node server restart" >> manager.log
        nohup java -jar manager-0.0.1-SNAPSHOT.jar >> manager.log 2>&1 &
fi