一. 启动脚本

# 获取当前脚本所处的目录
sh_dir=$(cd `dirname $0`; pwd)
echo ${sh_dir}
if [ ! -d "${sh_dir}/logs/" ];then
    mkdir ${sh_dir}/logs
    echo "日志文件夹 ${sh_dir}/logs创建成功"
fi
# 
cd ${sh_dir}
echo "开始启动..."
nohup java -jar test-jar-1.0-SNAPSHOT.jar 1>${sh_dir}/logs/out.log 2>&1 &
echo "启动成功,running..."

结合log4j2.xml配置如下:

<property name="FILE_PATH" value="logs/"/>

log4j2.xml完整配置见:

二. 启动命令解释

# 启动命令
nohup java -jar test-jar-1.0-SNAPSHOT.jar 1>${sh_dir}/logs/out.log 2>&1 &
开头的nohup和结尾的&:
使用nohup运行程序:

nohup 即 no hang up 不挂断

  • 结果默认会输出到nohup.out
  • 使用Ctrl + C,程序关闭
  • 关闭session,程序免疫
使用&后台运行程序:
  • 结果会输出到终端
  • 使用Ctrl + C,程序免疫
  • 关闭session,程序关闭

平日线上经常使用nohup&配合来启动程序。

符号>
  • > 标准重定向符,允许我们创建一个 0KB 的空文件。它通常用于重定向一个命令的输出到一个新文件中。在没有命令的情况下使用重定向符号时,它会创建一个文件。
  • 1>${sh_dir}/logs/out.log , 1表示标准输出流(默认是屏幕),屏幕输出重定向到文件${sh_dir}/logs/out.log
  • 2>&1 ,2表示标准错误流(默认是屏幕),符号>&是一个整体,代表将标准错误2重定向到标准输出1,如果是2>1的话,代表将标准错误输出到文件1,而不是重定向到标准输出流;
  • 拓展:> /dev/null /dev/null 可以看作黑洞,等价于一个只写文件。所有写入它的内容都会永远丢失,尝试从它那儿读取内容则什么也读不到。也就是将所有产生的日志将被丢弃。
Logo

更多推荐