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
1
XiaoxiaoPu 2015-02-03 11:59:34 +08:00
Restart 那一行多余了
|
2
cevincheung OP @XiaoxiaoPu 求解,刚接触
|
3
XiaoxiaoPu 2015-02-03 12:16:24 +08:00
@cevincheung 查了一下不是多余,是错了。Restart 是指定当服务结束、终止、超时后是否重新启动,可选的值有 no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, always。至于重启一个服务需要执行哪些命令,不需要特别指定,systemd 会自己判断
|
4
XiaoxiaoPu 2015-02-03 12:16:42 +08:00
@cevincheung 可以看 man systemd.service
|
5
cevincheung OP @XiaoxiaoPu 那也没有ExecRestart就是systemd已经自己实现自己去调用stop && start 咩?
|
6
XiaoxiaoPu 2015-02-03 12:29:50 +08:00
@cevincheung 对,甚至你连 ExecStop 那一行也不需要,systemd 根据 Type 来判断如何 stop
|
7
cevincheung OP @XiaoxiaoPu
让mysql结束后并没有自己起来啊…… - -# |
8
XiaoxiaoPu 2015-02-03 12:39:05 +08:00
@cevincheung 什么意思?
|
9
cevincheung OP @XiaoxiaoPu restart不是失败自动重启咩?
|
10
XiaoxiaoPu 2015-02-03 12:42:33 +08:00
@cevincheung 要看 restart 后面设置的值,而且这里的失败是指程序意外终止(比如段错误什么的)
|
11
cevincheung OP @XiaoxiaoPu 就是systemd不做健康监控。
|
12
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 |
13
cevincheung OP |
14
9hills 2015-02-03 12:54:38 +08:00 via iPad 1
首先systemd的一大好处是基于cgroups不依赖于pid,所以stop多余了。restart是用来设置是否自动恢复的。
Systemd的好处是配置文件极端简洁。 |
15
XiaoxiaoPu 2015-02-03 12:55:28 +08:00
@cevincheung 把 on-failure 换成 always
|
16
cevincheung OP @XiaoxiaoPu 如果是临时手动结束(比如更改一下配置文件)那他就自动又重新启动了?
|
17
XiaoxiaoPu 2015-02-03 13:10:37 +08:00 1
@cevincheung 如果是用 systemctl stop 结束的不会
|
18
coolcfan 2015-02-03 13:13:55 +08:00
解开了很多误区!
已感谢! |
19
cevincheung OP |
20
XiaoxiaoPu 2015-02-03 13:26:39 +08:00 1
@cevincheung 在 [Service] 里加上 User=pgsql
|
21
9hills 2015-02-03 13:31:43 +08:00 via iPad
|
22
Draplater 2015-02-03 14:03:39 +08:00 via Android
&&是shell 的语法,systemd不运行shell,不能这么写
|
23
digimoon 2015-02-03 14:39:17 +08:00
systemd怎么设置环境变量和启动多个程序呢?还有就是启动一个程序触发另外一个,关闭这个也触发挂起另外一个等等
|
24
cevincheung OP |
25
proudzhu 2015-02-03 14:47:53 +08:00
arch 里面基本上都带了 systemd service 文件,mariadb(mysql) 的如下
https://projects.archlinux.org/svntogit/packages.git/tree/trunk/mariadb.service?h=packages/mariadb |
26
msg7086 2015-02-04 03:36:51 +08:00
postgres的我随便搜到一个 https://bbs.archlinux.org/viewtopic.php?pid=1165363#p1165363
|
27
msg7086 2015-02-04 03:40:16 +08:00 1
顺便一提。
systemd 下 mysql 可以很方便地一台机器跑多个实例了。 以前都要借助于 mysql_multi 来实现。 而现在只要编写不同的 service 文件,给不同实例加上不同的 --data-dir 和 --socket / bind-address 启动参数即可。 |
28
cevincheung OP @msg7086 还是习惯用defaults-file
|
29
msg7086 2015-02-04 10:38:02 +08:00
@cevincheung 是在defaults-file之后加上这些。
|