Skip to Content

自定义 systemctl 指令并自启动

为了方便维护和管理,我们有时候需要自定义 linux 的 systemd 服务,并设置为开机自启动,本文档介绍如何自定义和配置 systemd 服务

我们在 /etc/systemd/system/下定义.service 文件即可

参数说明

[Unit] 区块参数

参数名示例值含义说明
DescriptionDescription=Odoo ERP简要描述服务内容。
DocumentationDocumentation=https://www.odoo.com/documentation提供相关文档链接。
AfterAfter=network.target当前服务需在指定服务启动后再启动。
RequiresRequires=network.service硬性依赖,若指定服务失败,本服务也会失败。
WantsWants=mysql.service弱依赖,指定服务失败不会影响本服务启动。
BeforeBefore=nginx.service当前服务应在某服务之前启动。

[Service] 区块参数

参数名示例值含义说明
TypeType=simple启动类型,simple 表示直接启动,不等待通知。
UserUser=odoo指定以哪个用户身份运行服务。
GroupGroup=odoo指定以哪个用户组身份运行服务。
ExecStartExecStart=/opt/odoo/python_env/...启动服务时执行的命令。
ExecStopExecStop=/bin/kill $MAINPID停止服务时执行的命令。
RestartRestart=always异常退出后自动重启服务。
RestartSecRestartSec=5设置重启前的延迟秒数。
WorkingDirectoryWorkingDirectory=/opt/odoo/odoo17/指定服务运行时的工作目录。
EnvironmentEnvironment="ENV=production"添加环境变量。多个变量可写多行。
StandardOutputStandardOutput=journal指定标准输出位置。
StandardErrorStandardError=journal指定标准错误输出位置。

[Install] 区块参数

参数名示例值含义说明
WantedByWantedBy=multi-user.target设置服务在哪个目标级别下启用,开机自启需此项。
AliasAlias=odoo.service设置服务的别名。
AlsoAlso=nginx.service启用/禁用时一并处理的服务名。

示例

在/etc/systemd/system/ 目录下创建一个 odoo17 服务文件

sudo vi /etc/systemd/system/odoo17.service


内容如下

[Unit]
Description=Odoo ERP
Documentation=https://www.odoo.com/documentation
After=network.target

[Service]
Type=simple
User=odoo
Group=odoo
ExecStart=/opt/odoo/python_env/odoo17_env/bin/python3 /opt/odoo/odoo17_xm/odoo17/odoo-bin -c /etc/odoo/odoo17.conf
Restart=always

[Install]
WantedBy=multi-user.target


重新加载 systemd 配置

sudo systemctl daemon-reload


设置开机自启动

sudo systemctl enable odoo17


启动服务

sudo systemctl start odoo17


查看服务状态

sudo systemctl status odoo17


常用指令汇总

操作

指令

启动服务sudo systemctl start odoo17
停止服务sudo systemctl stop odoo17
重启服务sudo systemctl restart odoo17
查看服务状态sudo systemctl status odoo17
设置开机自启动sudo systemctl enable odoo17
取消开机自启动sudo systemctl disable odoo17
查看是否自启动sudo systemctl is-enabled odoo17
重新加载配置sudo systemctl daemon-reload

注意事项

  • ExecStart 要使用 Python 虚拟环境中的解释器路径,确保依赖加载正确;
  • 日志可以通过 journalctl -u odoo17 -f 实时查看;
  • 服务名必须以 .service 结尾且位于 /etc/systemd/system/ 才能被系统识别;
  • Restart=always 表示服务异常退出时自动重启;
  • 如果修改了 .service 文件,务必执行一次 daemon-reload。


in Odoo
EDI 对接方案