nohup 启动命令中 &gt/dev/null 2&gt&1 相关说明

本文介绍了Linux中的nohup命令用于后台运行程序,并解释了如何使用>/dev/null 2>&1来重定向输出到空设备,避免信息显示在终端,同时讨论了标准输入、输出和错误输出的概念以及重定向操作。

下面是我们启动 Spring Boot 服务常用的命令:

nohup java -Xms1g -Xmx1g -Xss1024K -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -server -jar -Dfile.encoding=utf-8 ./spring-boot-demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=test >/dev/null 2>&1 &

说明

  • nohup 就是no hangup,不要挂断,后台运行,关闭终端,当前运行的进程不终止,标准输出内容会输出到当前目录的 nohup.out 日志文件中而不终端显示;
  • /dev/null 是 Linux 一个空设备文件,通常也被称为位桶(bit bucket)或黑洞,这个文件接收到任何数据都会被丢弃;
  • Linux系统预留可三个文件描述符:0、1 和 2,他们的意义如下所示:
    0 - 标准输入(stdin)
    1 - 标准输出(stdout)
    2 - 标准错误(stderr)
  • 重定向的符号有两个:> 或 >>,> 会先清空文件,然后再写入内容,>> 会将重定向的内容追加到现有文件的尾部;
  • 命令最后一个 &,表示后台运行的意思,和 nohup 配置表示不挂断后台运行;

举例

  • 2>/dev/null
    把错误输出到“黑洞”(丢弃输出);
  • >/dev/null 2>&1
    默认情况是1,也就是等同于 1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”;
  • 2>&1 >/dev/null
    把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕;
  • &>/dev/null
    linux中的文件号,1 是标准输出流,2 是错误输出流,此处 &> 的意思是合并标准输出和错误输出并重定向,即重定向到空设备;注意,& 和重定向符号(>)放到一起说,中间没有空格;

我们对整条命令有了清晰的认识,也就可以根据自己的情况灵活运用。

【完】

#!/bin/bash # 定义服务名称变量 SERVICE_NAME="ruoyi-auth" JAR_PATH="/fimoo/jar/fimooAuth/${SERVICE_NAME}.jar" LOG_FILE="/var/log/${SERVICE_NAME}.log" PID_FILE="/var/run/${SERVICE_NAME}.pid" stop_service() { echo "Stopping ${SERVICE_NAME}..." # 1. 检查 PID 文件存在性 if [ ! -f "$PID_FILE" ]; then echo "PID 文件不存在,无运行中的实例" return 0 fi # 2. 读取 PID 并验证进程 pid=$(cat "$PID_FILE") if ! ps -p "$pid" > /dev/null 2>&1; then echo "进程 $pid 已终止,清理残留 PID 文件" rm -f "$PID_FILE" return 0 fi # 3. 发送终止信号 echo "正在停止进程 $pid..." kill -15 "$pid" > /dev/null 2>&1 # 4. 等待进程终止(最长15秒) timeout=15 while [ $timeout -gt 0 ]; do if ! ps -p "$pid" > /dev/null; then rm -f "$PID_FILE" echo "进程终止完成" return 0 fi sleep 1 timeout=$((timeout - 1)) done # 5. 强制终止处理 echo "警告:进程 $pid 未正常终止,发送 SIGKILL" kill -9 "$pid" > /dev/null 2>&1 rm -f "$PID_FILE" } start_service() { echo "Starting ${SERVICE_NAME}..." nohup java17 -jar "$JAR_PATH" > "$LOG_FILE" 2>&1 & echo $! > "$PID_FILE" echo "Service started | PID: $(cat $PID_FILE)" } # 主逻辑 case "$1" in start) start_service ;; stop) stop_service ;; restart) stop_service sleep 3 start_service ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac 如果启动失败,提示
最新发布
10-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值