Systemd 部署应用

配置说明

[Unit]
Description=appName
ConditionPathExists=/data/app

[Service]
Restart=always
RestartSec=3
WorkingDirectory=/data/app
ExecStart=/data/app/main
ExecStop=/usr/bin/kill $MAINPID
ExecReload=/data/app/main

[Install]
WantedBy=multi-user.target

上面是一个简单的 systemd 配置,下面是每个字段的说明

配置文件中的路径尽量使用绝对路径

[Unit]

  • Description 对程序的描述,用作说明用途
  • After 在该字段所指定的条件满足之后再运行,例子中的条件是连接网络之后再运行
  • ConditionPathExists开启服务前检查目录是否存在

[Service]

  • Type 类型,一般保持simple即可,不用管

  • User 运行程序时所指定的用户,如果不清楚该用什么用户,用root即可,但是会有安全隐患,不推荐(可忽略)

  • WorkingDirectory 工作目录,有时候可以省略这个字段,一般填写程序所在的目录,可以避免一些路径的问题

  • ExecStart 运行程序所执行的命令,必须使用绝对路径,因为systemd是不管你的环境变量的,main为可执行文件

  • RestartSec重启服务之前,需要等待的秒数

  • ExecStop停止服务执行的命令,所有的命令都必须是绝对路径的,所以kill写的是绝对路径

  • ExecReload重载服务执行的命令,执行reload的时候会自动先执行stop,所以这里不用再杀死进程了

  • Restart重启方式

    • no(默认值):退出后不会重启
    • on-success:只有正常退出时(退出状态码为0),才会重启
    • on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
    • on-abnormal:只有被信号终止和超时,才会重启
    • on-abort:只有在收到没有捕捉到的信号终止时,才会重启
    • on-watchdog:超时退出,才会重启
    • always:不管是什么退出原因,总是重启

[Install]

  • WantedBy 需求它的target,例子中的是用来实现开机启动的,一般不用改

使用

  1. systemd配置文件的目录下(一般为/etc/systemd/system)新建一个扩展名为service的文件,填入配置文件的内容即可,然后执行systemctl daemon-reload,需要注意:对任何配置文件的任何修改都需要执行systemctl daemon-reload来应用更改,否则会报错,除非你重启你的系统

  2. 然后就可以使用以下命令来控制程序了

    systemctl start/stop/restart/status/enable/disable <name>
    

    命令作用依次是启动 / 关闭 / 重启 / 查看日志 / 启用开机启动 / 关闭开机启动<name> 则是配置文件的文件名

  3. 查看开机自启状态systemctl list-unit-files | grep <name>

参考:

http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

https://www.yooomu.com/archives/194.html/comment-page-1

https://www.ctolib.com/topics-85856.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值