我需要在服务器上运行一个Java jar文件,以便于两个应用程序之间进行通信。我编写了两个shell脚本来运行它,但是一旦启动该脚本后,我就不能关闭/终止进程。如果我按下ctrl+C或关闭控制台,服务器将关闭。请问有谁能帮我修改这个脚本以正常运行服务器?
#!/bin/sh
java -jar /web/server.jar
echo $!
#> startupApp.pid
我需要在服务器上运行一个Java jar文件,以便于两个应用程序之间进行通信。我编写了两个shell脚本来运行它,但是一旦启动该脚本后,我就不能关闭/终止进程。如果我按下ctrl+C或关闭控制台,服务器将关闭。请问有谁能帮我修改这个脚本以正常运行服务器?
#!/bin/sh
java -jar /web/server.jar
echo $!
#> startupApp.pid
你可以尝试这样做:
#!/bin/sh
nohup java -jar /web/server.jar &
&符号可以将程序切换到后台运行。
nohup实用程序可以使作为参数传递的命令在您注销后继续在后台运行。
Systemd现在在大多数发行版中运行。
找到您的用户定义服务,我的在/usr/lib/systemd/system/
中。
使用您喜欢的文本编辑器创建一个文本文件,并将其命名为whatever_you_want.service
。
将以下模板放入文件whatever_you_want.service
中:
[Unit]
Description=webserver Daemon
[Service]
ExecStart=/usr/bin/java -jar /web/server.jar
User=user
[Install]
WantedBy=multi-user.target
运行您的服务
作为超级用户
$ systemctl start whatever_you_want.service # starts the service
$ systemctl enable whatever_you_want.service # auto starts the service
$ systemctl disable whatever_you_want.service # stops autostart
$ systemctl stop whatever_you_want.service # stops the service
$ systemctl restart whatever_you_want.service # restarts the service
/etc/systemd/system/
找到了该镜像。 - Robbo_UKsystemctl daemon-reload
。https://unix.stackexchange.com/questions/364782/what-does-systemctl-daemon-reload-do - abitcode/var/init/yourservice.conf
文件,并将其内容设置为如下:description "Your Java Service"
author "You"
start on runlevel [3]
stop on shutdown
expect fork
script
cd /web
java -jar server.jar >/var/log/yourservice.log 2>&1
emit yourservice_running
end script
现在你可以使用 service yourservice start
和 service yourservice stop
命令。你可以使用 tail /var/log/yourservice.log
命令验证它是否正常工作。
如果你只想在控制台中运行你的jar文件而不占用控制台窗口,你可以执行以下命令:
java -jar /web/server.jar > /var/log/yourservice.log 2>&1
java -jar /web/server.jar > /var/log/yourservice.log 2>&1 &
- Montaro使用以下方式在后台运行并将日志添加到日志文件中:
nohup java -jar /web/server.jar > log.log 2>&1 &
nohup
命令时,应始终显式地重定向标准输出和标准错误流 -- 否则,您无法控制日志的位置,并最终在脚本所在目录中创建一个丑陋的nohup.out
文件。 - Charles Duffy