我想使用 在系统启动时启动 Java 应用程序systemd
。我尝试通过添加上述脚本来实现。但服务没有启动。
我的启动服务
[Unit]
Description=Startup
[Service]
ExecStart=/usr/local/sbin/my-startup.sh
[Install]
WantedBy=multi-user.target
我的启动文件
cd /var/www/test.com
nohup java -jar *.jar>test.out 2>test.err &
但是服务器启动时应用程序没有启动。
● my-startup.service - Startup
Loaded: loaded (/etc/systemd/system/my-startup.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Wed 2018-12-12 16:22:52 +0530; 27s ago
Process: 650 ExecStart=/usr/local/sbin/my-startup.sh (code=exited, status=0/SUCCESS)
Main PID: 650 (code=exited, status=0/SUCCESS)
Dec 12 16:22:52 localhost.localdomain systemd[1]: Started Startup.
Dec 12 16:22:52 localhost.localdomain systemd[1]: Starting Startup...
答案1
使用 systemd 指令代替 shell 可实现更一致的环境。这包括不依赖 $PATH 或工作目录,而是提供已知的完整路径。
既不&
需要进行作业控制,也不SIGHUP
需要管理。systemd 服务单元已在后台运行。
假设程序没有分叉,换句话说,java exec 继续运行,那就是Type=simple
[Unit]
Description=something
[Service]
ExecStart=/usr/bin/java -jar /var/www/test.com/something.jar
StandardOutput=file:/var/log/something.out.txt
StandardError=file:/var/log/something.err.txt
Type=simple
WorkingDirectory=/var/www/test.com
[Install]
WantedBy=multi-user.target