这是我的两个单元:
- 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
在确定percona_db服务之前,systemd尝试启动phpfpm服务,并抛出错误,指出percona容器不存在:/。
我究竟做错了什么?或者我该怎么做才能使其正常工作?(也许让phpfpm服务人为地等待?使用systemd可以吗?)
谢谢 !
您的percona_db是一个长期运行的进程,因此systemd将派生一个子进程并使其运行,并假设一切正常,然后继续启动php_fpm。
这对于许多服务也很常见,例如,在应用程序实际准备就绪之前返回启动脚本。最好的方法是编写一个程序来检查percona_db的状态,它会一直等到percona_db准备就绪,然后在php_fpm服务文件中添加一行ExecStartPre = <your_check_program> ..。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句