1.进入linux单元服务文件夹
cd /etc/systemd/system/
2.创建一个文件以.service结尾的文件
C#(.Net Core)、 Java、Python等语言,都可以通过linux自定义服务来部署项目,实现守护进程、实现开机自启
2.1例如创建my.service文件
这里以部署python项目为例,vi 创建my.service文件
vi my.service
2.2service文件写入内容
解释说明
- [Unit] 部分:
Description
:这是服务的描述信息,用于在 Systemd 相关命令的输出中方便用户识别服务。After
:指定该服务在network.target
之后启动,这意味着在网络初始化完成后,这个服务才会启动。可以根据服务的实际需求修改这个依赖关系。
- [Service] 部分:
Type
:这里设置为simple
,表示这是一个简单的执行程序的服务类型。其他常见类型还有forking
(服务启动后会创建子进程)等。ExecStart
:指定服务启动时要执行的命令,这里是我们之前创建的脚本文件的路径。Restart
:设置为on - failure
,表示服务在遇到错误退出时会自动重启。User
:指定服务运行的用户,这里设置为root
,也可以根据实际安全需求修改为其他用户。WorkingDirectory
是服务配置中的一个重要参数。它指定了服务运行时的工作目录。当服务启动后,它会将这个目录作为当前工作目录,就像在命令行中使用cd
命令切换到这个目录一样。许多与文件系统相关的操作(如读取配置文件、写入日志文件等)都会基于这个工作目录来进行相对路径的定位。
- [Install] 部分:
WantedBy
:这里表示服务应该被哪个目标(target)所启用。multi - user.target
是多用户模式下的基本目标,意味着在系统进入多用户模式时,这个服务会被自动启动(当然还需要执行systemctl enable
命令来设置开机启动)。
内容如下:
根据自身项目情况更改即可
[Unit]
Description=Python Script
After=network.target
[Service]
User=root
WorkingDirectory=/usr/projects/flask-api
ExecStart=/bin/bash -c ". .venv/bin/activate && python worker.py -n 1"
Restart=always
[Install]
WantedBy=multi-user.target
写入上面内容后vi 执行 :wq 保存并推出
3. 管理自定义服务
3.1重新加载 Systemd 配置
systemctl daemon - reload
3.2启动服务
systemctl start my.service
3.3查看服务状态
systemctl status my.service
3.4设置开机启动
systemctl enable my.service
3.5查看服务是否是开机启动
systemctl is-enabled my.service
enabled:说明是开机自启
3.6禁用服务开机自启
systemctl disable my.service
3.7停止服务
systemctl stop my.service