示例脚本以下:html
# 定义变量 JAVA_HOME=/usr/local/java/jdk1.8.0_301 LOG_HOME=/app/iacctapp/applog/rd-cbn JVM_ARGS="-XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -Xms1024m -Xmx1024m" # 启动项目 nohup ${JAVA_HOME}/bin/java ${JVM_ARGS} -Dloader.path=.,lib,classes -Dacctmgr.ms.instid=funddmdbcbn -jar acctmgr-boot.jar --server.port=32210 >${LOG_HOME}/consoleDmdbFund.log 2>&1 & # 查看日志 tail -f ${LOG_HOME}/consoleDmdbFund.log
nohup Command [ Arg … ] [ & ]
nohup command &
名称 | 名称 | 操做符 | Java中表示 |
---|---|---|---|
标准输入(stdin) | 0 | < 或 << | System.in |
标准输出(stdout) | 1 | >, >>, 1> 或 1>> | System.out |
标准错误输出(stderr) | 2 | 2> 或 2>> | System.err |
2>&1通常放在最后,标准错误输出和程序日志才会都写到日志文件中。若是不放到最后,文件中只会输入日志,而标准错误输出是输出到屏幕
linux命令三剑客可参考Linux命令三剑客java
tail -f:动态输出日志文件内容到屏幕中linux
示例脚本以下:bash
#!/bin/bash # 查找对应进程并杀掉 ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | awk '{print $2}' | while read processId do echo "stop acctmgr process $processId." kill $processId done # 显示杀进程过程与结果 waitTimes=0 while true do let waitTimes++ commanderNum=`ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | wc -l` if [ ${commanderNum} -eq 0 ]; then echo "acctmgr process has been stopped." break; else echo "Wait for acctmgr process to exit, waitTimes ${waitTimes} ..." fi sleep 1; done
ps -ef:用标准的格式显示进程app
grep "Dacctmgr.ms.instid=fundcbn":控制ps命令只输出Dacctmgr.ms.instid=fundcbn相关的进程jvm
grep -v grep:过滤掉grep自己进程日志
awk '{print $2}':每行以空格或分隔符切割,输出第3位(从0计起)code
while read processId do echo "stop acctmgr process $processId." kill $processId done
将上面读到的进程杀掉,知道全部进程中止为止server
while true do let waitTimes++ commanderNum=`ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | wc -l` if [ ${commanderNum} -eq 0 ]; then echo "acctmgr process has been stopped." break; else echo "Wait for acctmgr process to exit, waitTimes ${waitTimes} ..." fi sleep 1; done
该段代码的做用是每隔一秒循环对应进程的扫描,若是的进程还存在对应进程,输出提示语句,直到进程不存在为止htm