Linux 服务管理方式systemctl部署jar包

systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl

一、在linux下部署服务步骤:

1.在目录/etc/systemd/system(Ubuntu)建立.service文件

2.service内容,如csdkb.service,这个是java的jar包

[Unit]
Description=Spring Boot Application
After=syslog.target
[Service]
ExecStart=/home/csdkb/server/csdkb.jar
[Install]
WantedBy=multi-user.target

 

.

.service文件定义了一个服务,分为[Unit],[Service],[Install]三个小节
[Unit]
Description:描述,
After:在network.target,auditd.service启动后才启动
ConditionPathExists: 执行条件

[Service]
EnvironmentFile:变量所在文件
ExecStart: 执行启动脚本
Restart: fail时重启

[Install]
Alias:服务别名
WangtedBy: 多用户模式下需要的

3.使用命令 systemctl start xxx,如 systemctl start csdkb

二、常用命令

systemctl 提供了一组子命令来管理单个的 unit,其命令格式为:

systemctl [command] [unit]

command 主要有:

start:立刻启动后面接的 unit。

stop:立刻关闭后面接的 unit。

restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。

reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。

enable:设置下次开机时,后面接的 unit 会被启动。

disable:设置下次开机时,后面接的 unit 不会被启动。

status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。

is-active:目前有没有正在运行中。

is-enable:开机时有没有默认要启用这个 unit。

kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。

show:列出 unit 的配置。

mask:注销 unit,注销后你就无法启动这个 unit 了。

unmask:取消对 unit 的注销。
三、可能出现的问题

1.执行start语句时,不成功,通过status命令,发现报错 203,原因是因为文件权限不足需要提升文件权限

解决方式:

chmod 755 xxx.jar

2. main process exited, code=exited, status=203/EXEC,问题原因是jar不是可执行的

解决方式:

pom里加

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <finalName>${project.artifactId}</finalName>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>

 

### 如何将后端项目打JAR 文件并部署Linux 服务器 #### 后端项目的打过程 为了将后端项目打为可执行的 JAR 文件,通常可以使用 Maven 或 Gradle 构建工具完成这一操作。以下是基于 Maven 的具体方法: 通过运行 `mvn clean package` 命令,Maven 将清理旧的目标文件并将项目编译、测试并最终打为目标目录下的 `.jar` 文件[^3]。 目标文件一般位于项目的 `target` 目录下,该目录含了构建后的工件,其中以 `.jar` 结尾的文件就是所需的可执行 JAR [^2]。 #### 部署Linux 服务器的过程 一旦获得了 JAR 文件,就可以将其上传至远程 Linux 服务器进行部署。常见的步骤如下所示: 1. **传输 JAR 文件** 使用 SCP(Secure Copy Protocol)或者 FTP 工具将本地生成的 JAR 文件传送到服务器上的指定路径。例如: ```bash scp /local/path/user-service.jar username@remote-server:/path/on/server/ ``` 2. **登录服务器** 登录到目标 Linux 服务器上,可以通过 SSH 客户端实现连接。 ```bash ssh username@remote-server ``` 3. **切换工作目录** 进入之前设定好的存储 JAR 文件的位置。 ```bash cd /path/on/server/ ``` 4. **启动应用** 利用 Java 提供的 `-jar` 参数来运行已上传的应用程序。 ```bash java -jar user-service.jar ``` 如果希望后台运行,则可以附加 `&` 符号或将进程守护化处理[^1]。 #### 解决常见问题 在实际部署过程中可能会碰到某些障碍,比如服务无法正常响应外部请求等问题。这可能是由于防火墙设置不当或未开放必要的网络端口所引起。解决办法括但不限于以下几个方面: - 开启防火墙服务:如果发现服务器默认关闭了防火墙功能,需手动激活它。 ```bash systemctl start firewalld ``` - 添加允许访问的特定端口:假设应用程序监听的是自定义 TCP 端口(如 8080),则需要配置防火墙规则使其对外可见。 ```bash firewall-cmd --zone=public --add-port=8080/tcp --permanent ``` - 应用更改并验证状态:最后记得重新加载防火墙策略,并确认新增加的端口已被正确启用。 ```bash firewall-cmd --reload netstat -ntulp | grep 8080 ``` 上述命令分别用于刷新防火墙配置以及检查是否有对应的服务绑定到了指定端口上[^4]。 ```python import os def deploy_jar(): """模拟简单的JAR部署流程""" local_path = "/local/path/" remote_server = "username@remote-server" remote_dir = "/path/on/server/" # Step 1: Package the project using Maven os.system(f"cd {os.getcwd()} && mvn clean package") # Step 2: Transfer file via SCP jar_file_name = next((f for f in os.listdir('target') if f.endswith('.jar')), None) if not jar_file_name: raise FileNotFoundError("No JAR files found after packaging.") full_local_path = os.path.join(os.getcwd(), 'target', jar_file_name) transfer_command = f'scp "{full_local_path}" {remote_server}:{remote_dir}' os.system(transfer_command) # Step 3: Execute remotely (requires passwordless SSH or key-based auth setup beforehand) run_remote_command = f'ssh {remote_server} "cd {remote_dir}; nohup java -jar {jar_file_name} &"' os.system(run_remote_command) deploy_jar() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值