nohup 没有输出到指定路径的日志,而且由于ctrl+c退出打印日志 导致服务停止

背景说明

编写了一个shell脚本,为了在嵌入式设备上电之初就启动jar程序
1 用xshell进行调试tail -f file.log 的时候发现设定的日志文件没有记录日志
只有在日志文件的目录下使用nohup 指令 日志才会被记录到 file.log里
明明在脚本里和日志目录下执行的语句都是相同的,为社么效果不一样
目录执行的路径是 /etc/profile.d 一开始所属是root,chown完变成了${username}
2 shell脚本在启动服务后仍然占用着当前界面,用ctrl+c退出会导致服务停止

if [ ! -f ${logPath}];
    then 
        touch ${logPath}
        sudo chown ${username}
    
nohup java -jar ${jarPath} >>${logPath} 2>&1 &

问题分析

可能是因为 /etc/profile.d 是以root 执行 读到 exit 就相当于整个系统退出
所以使用权限低一点的开机脚本启动方式
Linux开机启动脚本2种方法
debian下设置开机自启动

解决方法

在创建文件的部分,更改日志文件的所有者和执行权限
在整个shell脚本的末尾部分加上一个退出exit

exit 0

使用权限低一点的开机启动脚本的方法
把启动脚本放到 /etc/init.d/底下

sudo mv ${file} ${targetPath}
sudo chmod +x ${targetFile}
chkconfig --add ${targetFile}
chkconfig --list ${targetFile}
chkconfig --del ${targetFile}
chkconfig --list ${targetFile}

但是我的系统是debian的 显示chkconfig 不存在
或者是添加到rc.local /etc/init.d/rc.local 的末尾

#!/bin/bash # 此处是在 rc.local 文件里的并未试验过
bash /home/linaro/autostart.sh
exit 0

Ubuntu 16.04设置rc.local开机启动命令/脚本的方法(通过update-rc.d管理Ubuntu开机启动程序/服务)
或者是使用update-rc.d

sudo update-rc.d xxx.sh defaults

可能遇到missing LSB tags and overrides 错误
这时要在文件头部加上说明 lsb tags 加完还是报错 可能是开头结尾有空格,破坏了标签格式

#!/bin/bash
### BEGIN INIT INFO
# Provides:          bbzhh.com
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: tomcat service
# Description:       tomcat service daemon
### END INIT INFO

missing LSB tags and overrides
Linux启动项管理:Update-rc.d 命令用法详解
删除开机启动项

update-rc.d -f test.sh remove

debian设置开机启动项

最终解决方案

通过在/etc/rc.local下配置

nohup /bin/bash ${scriptPath} >> ${logPath} 2>&1 &

解决了问题
日志文件没有则新建,有可以在末尾添加,而且日志的内容比logback配置的内容要多
像是 system.out 一类的日志也会被记录。

你可能感兴趣的:(nohup 没有输出到指定路径的日志,而且由于ctrl+c退出打印日志 导致服务停止)