#!/bin/bash
BASEDIR=`dirname $0`/../lib
BASEDIR=`(cd "$BASEDIR"; pwd)`
FEATURE=com.jdo.bp.sample.real.time.App
setsid java -server -Xms1024m -Xmx3072m -XX:MaxPermSize=3072m -XX:+UseParallelGC -XX:+UseParallelOldGC -DinstanceId=1 -Djava.ext.dirs=$BASEDIR $FEATURE &
1、关于setid的详解内容引用阿里云的一篇文章(源内容网址),内容如下:
- 摘要:当用户注销(logout)或者网络断开时,终端会收到HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略HUP信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。(hangup名称的来由:在Unix的早期版本中,每个终端都会通过modem和系统通讯。当用户logout时,modem就会挂断(hangup)电话。同理,当modem断开连接时,就会给终端发送hangup信号来通知其关闭所有子进程)1.nohup:让提交的命令忽
-
当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
(hangup 名称的来由:在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程)
1.nohup:让提交的命令忽略 hangup 信号
nohup 的帮助信息:
$ nohup --help
Usage: nohup COMMAND [ARG]... or: nohup OPTION
Run COMMAND, ignoring hangup signals. --help display this help and exit --version output version information and exitIf standard input is a terminal, redirect it from an unreadable file.If standard output is a terminal, append output to 'nohup.out' if possible,'$HOME/nohup.out' otherwise.If standard error is a terminal, redirect it to standard output.To save output to FILE, use 'nohup COMMAND > FILE'.使用:在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&;"来将命令同时放入后台运行,也可用"> filename"来更改缺省的重定向文件路径。
nohup ping www.baidu.com &;nohup python train_model.py > console.log &;2.setsid:在新session执行命令(使进程不属于接受 HUP 信号的终端的子进程,那么就不会受到 HUP 信号的影响)
setsid的帮助信息:
$ setsid --helpUsage: setsid [options] <program> [arguments ...]Run a program in a new session.Options: -c, --ctty set the controlling terminal to the current one -w, --wait wait program to exit, and use the same return -h, --help display this help and exit -V, --version output version information and exit使用:
setsid ping www.ibm.com &;另外,查看进程并停止:
$ ps -ef | grep pingabby 3899 1632 0 14:39 ? 00:00:00 ping www.baidu.comabby 4038 3907 0 14:43 pts/20 00:00:00 grep --color=auto ping$ kill -9 3899参考:
Linux 技巧:让进程在后台可靠运行的几种方法
- 以上是nohup/setsid/& 让进程在后台可靠运行的内容,更多 后台 进程 可靠 运行 setsid nohup 的内容,请您使用右上方搜索功能获取相关信息。
根据上面的描述,setsid是用来保证当用户注销(logout)或者网络断开时当前启动的子进程不会被关闭,从而就可以一直运行。
2、java -server -Xms1024m -Xmx3072m -XX:MaxPermSize=3072m -XX:+UseParallelGC -XX:+UseParallelOldGC用来配置虚拟机参数(采用服务端模式)
3、-DinstanceId=1用来设置系统属性,名称为instanceId,value为1,-D为系统属性的标志,该系统属性可以通过
System.getProperty();函数来获取,将名称传入参数中,函数将返回value值,例如:
String log4jConfLocation = System.getProperty("log4jConfLocation");//获取log4jConfLocation对应的value值
4、-Djava.ext.dirs设置java.ext.dirs值,-Djava.ext.dirs会覆盖Java本身的ext设置,java.ext.dirs指定的目录由ExtClassLoader加载器加载,如果没有指定该系统属性,那么该加载器默认加载$JAVA_HOME/jre/lib/ext目录下的所有jar文件。但如果你手动指定系统属性且忘了把$JAVA_HOME/jre/lib/ext路径给加上,那么ExtClassLoader不会去加载$JAVA_HOME/lib/ext下面的jar文件,这意味着你将失去一些功能,例如java自带的加解密算法实现。
5、$FEATURE为加载主类
6、&表示在后台运行该服务