您的机器上有这个很棒的应用程序,并希望将其作为服务运行。您希望使整个过程自动化,这样您就不必每次都使用语言框架启动命令。假设您想在您的机器后台启动应用程序,您可以在其中启动、重新启动、检查状态和随意停止。拿着你的啤酒!

Systemd 和 Systemctl

systemdLinux 操作系统的系统和服务管理器。该管理器允许您以极其强大和灵活的方式创建和管理服务。

systemd管理的所有服务都可以位于:

sudo cd /etc/systemd/system/

systemctl可用于自省和控制systemd系统和服务管理器的状态。 systemctl 必须使用 sudo 运行

sudo systemctl start service.service
sudo systemctl stop service.service
sudo systemctl restart service.service
sudo systemctl status service.service

创建服务

我们创建我们的服务:

sudo nano  /etc/systemd/system/myapp.service

我们的服务配置

[Unit]
Description=My custom service
Requires=network.target

[Service]
WorkingDirectory=/home/user/workspace
ExecStart=/home/user/workspace/app
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

[Unit]部分提供有关服务的基本信息。Description描述了该服务。 Systemd 在用户界面中的单元名称旁边显示此描述。Requires定义用作服务依赖项的单元。这里我们说我们的应用程序依赖于网络服务。

[Service]部分提供了有关如何控制服务的说明。WorkingDirectory指定服务将在其中工作的目录。ExecStart定义运行服务的命令。这包括修改服务的命令和参数的完整路径。SuccessExitStatus定义了当主服务进程返回时将被视为成功终止的状态。TimeoutStopSec配置等待每个ExecStop命令的时间。Restart配置在服务进程退出、被杀死或超时时是否重新启动服务。RestartSec配置重新启动服务之前的睡眠时间。

[Install]部分提供了有关 systemd 如何安装服务的说明。WantedBy定义如果使用 systemctl enable 启用,哪个服务会触发自定义服务。这主要用于在启动时启动自定义服务。在此示例中,myapp.service使用 multi-user.target,当 systemd 在启动时加载multi-user.target时,它会启动myapp.service

创建我们的应用程序

我们创建我们的 bash 脚本

sudo nano /home/user/workspace/app

此 bash 脚本使用 java 可执行文件执行应用程序(.jar)。

#!/bin/sh
sudo /usr/bin/java -jar payroll-0.01-SNAPSHOT.jar

我们需要给我们的app文件可执行权限。

sudo chmod u+x app

启动服务

sudo systemctl daemon-reload
sudo systemctl enable  myapp.service
sudo systemctl start myapp
sudo systemctl status myapp

日志记录

现在您的服务正在后台运行。您可能想知道如何检查您的应用程序日志,Linux 为您提供了帮助。

查看服务的最后 100 条日志

sudo journalctl -f -n 100 -u myapp

跟踪您的服务

sudo journalctl -f  -u myapp

停止服务

sudo systemctl stop myapp

我希望你喜欢这篇文章,如果你喜欢,请多多支持。谢谢!

点击阅读全文
Logo

更多推荐