systemctl启动tomcat后,jps看不到进程
centos7 写了tomcat的启动脚本,脚本从网上copy的。
[Unit]
Description=tomcat-1
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment='JAVA_HOME=/usr/local/java/jdk1.8.0_151/'
WorkingDirectory=/usr/local/tomcat-1/webapps
ExecStart=/usr/local/tomcat-1/bin/startup.sh
ExecStop=/usr/local/tomcat-1/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=True
User=dev
Group=dev
[Install]
WantedBy=multi-user.target
虽然可以正常启动关停tomcat,但用jps命令根本看不到这个tomcat进程。
网上一查说是catalina.sh没有把tmp指定到/tmp目录,但我改了之后还是看不到。
最终一番排查发现网上copy的脚本里有如下这一句,去掉再重启,jps就可以看到tomcat进程了。
PrivateTmp=true
这是因为tomcat启动后会把启动后jdk相关信息写在/tmp/hsperfdata_root目录下,jps就去/tmp目录下打开这个文件,并把信息展现给用户,但/tmp这个目录权限是777,任何人都可以查看,centos7认为这样不安全,容易泄露信息,于是官方启动脚本里就有
PrivateTmp=true这么一句,这样一来tomcat启动后,就不会把相关信息写入/tmp目录里,也就造成jps无法看到tomcat进程了。