systemd 脚本规范

2015-02-03 11:15:20 +08:00
 cevincheung

centos7/debian8(jessie)/fedora latest/suse都试过了~完美啊

[Unit]
Description=mysql rdbms

[Service]
Type=simple
GuessMainPID=yes
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf
ExecStop=kill /data/mysql/mysql.pid
Restart=systemctl stop mysql && systemctl start mysql

[Install]
WantedBy=multi-user.target

https://zh.opensuse.org/openSUSE:How_to_write_a_systemd_service

5579 次点击
所在节点    分享发现
29 条回复
XiaoxiaoPu
2015-02-03 11:59:34 +08:00
Restart 那一行多余了
cevincheung
2015-02-03 12:02:30 +08:00
@XiaoxiaoPu 求解,刚接触
XiaoxiaoPu
2015-02-03 12:16:24 +08:00
@cevincheung 查了一下不是多余,是错了。Restart 是指定当服务结束、终止、超时后是否重新启动,可选的值有 no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, always。至于重启一个服务需要执行哪些命令,不需要特别指定,systemd 会自己判断
XiaoxiaoPu
2015-02-03 12:16:42 +08:00
@cevincheung 可以看 man systemd.service
cevincheung
2015-02-03 12:27:37 +08:00
@XiaoxiaoPu 那也没有ExecRestart就是systemd已经自己实现自己去调用stop && start 咩?
XiaoxiaoPu
2015-02-03 12:29:50 +08:00
@cevincheung 对,甚至你连 ExecStop 那一行也不需要,systemd 根据 Type 来判断如何 stop
cevincheung
2015-02-03 12:32:42 +08:00
@XiaoxiaoPu
让mysql结束后并没有自己起来啊…… - -#
XiaoxiaoPu
2015-02-03 12:39:05 +08:00
@cevincheung 什么意思?
cevincheung
2015-02-03 12:39:51 +08:00
@XiaoxiaoPu restart不是失败自动重启咩?
XiaoxiaoPu
2015-02-03 12:42:33 +08:00
@cevincheung 要看 restart 后面设置的值,而且这里的失败是指程序意外终止(比如段错误什么的)
cevincheung
2015-02-03 12:44:42 +08:00
@XiaoxiaoPu 就是systemd不做健康监控。
XiaoxiaoPu
2015-02-03 12:50:32 +08:00
@cevincheung 默认没有,你可以设置,比如下面这个示例,如果失败,那么 5 秒后重试:

[Unit]
Description=Create AP Service

[Service]
Type=simple
ExecStart=/usr/bin/bash create_ap wifi0 net0 -g 10.12.5.1 -c 7 -w 2 xiaoxiao puxiaoxiao
KillSignal=SIGINT
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
cevincheung
2015-02-03 12:53:14 +08:00
@XiaoxiaoPu

如果启动成功后进程崩溃重启呢?
9hills
2015-02-03 12:54:38 +08:00
首先systemd的一大好处是基于cgroups不依赖于pid,所以stop多余了。restart是用来设置是否自动恢复的。


Systemd的好处是配置文件极端简洁。
XiaoxiaoPu
2015-02-03 12:55:28 +08:00
@cevincheung 把 on-failure 换成 always
cevincheung
2015-02-03 12:59:47 +08:00
@XiaoxiaoPu 如果是临时手动结束(比如更改一下配置文件)那他就自动又重新启动了?
XiaoxiaoPu
2015-02-03 13:10:37 +08:00
@cevincheung 如果是用 systemctl stop 结束的不会
coolcfan
2015-02-03 13:13:55 +08:00
解开了很多误区!

已感谢!
cevincheung
2015-02-03 13:18:27 +08:00
@XiaoxiaoPu 像postgresql这种需要切换到指定用户角色的程序呢?

forking
sudo -u pgsql xxxxx/pg_ctl -D ....

失败
XiaoxiaoPu
2015-02-03 13:26:39 +08:00
@cevincheung 在 [Service] 里加上 User=pgsql

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/167812

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX