【发布时间】:2014-11-21 00:34:52
【问题描述】:
这是我的两个单位:
- name: percona_db.service
command: start
enable: true
content: |
[Unit]
Description=Percona db
After=docker.service
Requires=docker.service
[Service]
ExecStartPre=/bin/bash -c '/usr/bin/docker start -a mysql_datastore || /usr/bin/docker run -d -v /var/lib/mysql --name mysql_datastore -p 23:23 busybox'
ExecStart=/bin/bash -c '/usr/bin/docker start -a mypercona || /usr/bin/docker run -i -t --volumes-from mysql_datastore --name="mypercona" -p 3306:3306 --rm percona'
ExecStop=/usr/bin/docker stop mypercona
[Install]
WantedBy=multi-user.target
- name: php_fpm.service
command: start
enable: true
content: |
[Unit]
Description=php fpm
After=percona_db.service
Requires=percona_db.service
[Service]
ExecStart=/bin/bash -c '/usr/bin/docker start -a myphpfpm_53 || /usr/bin/docker run --name myphpfpm_53 -dit -p 9000:9000 --link mypercona:db phpfpm_53'
ExecStop=/usr/bin/docker stop myphpfpm_53
[Install]
WantedBy=multi-user.target
我的问题如下: percona_db.service 启动的 docker 容器有时会需要很长时间才能加载(如果是第一次加载,它会创建 db 并添加数据,可能需要一些时间)。 当我将它们链接在一起时,php_fpm 服务需要 percona 服务才能启动。 而且,即使我指定了:
After=percona_db.service
Requires=percona_db.service
systemd 尝试在 percona_db 服务完成之前启动 phpfpm 服务并抛出错误说 percona 容器不存在:/。
我做错了什么? 或者我该怎么做才能让它发挥作用? (也许人为让phpfpm服务等待?systemd可以吗?)
谢谢!
【问题讨论】:
-
您是否只在
/etc/systemd/system/multi-user.target.wants中列出了php_fpm.service,还是同时列出了percona_db.service和php_fpm.service。没关系,因为php_fpm.service中的After=percona_db.service应该控制它们的启动顺序(如果两者都列出),但是值得尝试从multi-user.target.wants中删除percona_db.service以查看这是否会强制正确的顺序。