systemd在开始下一个服务单元之前不等待我的服务单元完成

记忆体

这是我的两个单元:

 - 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

cron.daily是否会在开始下一个作业之前等待作业完成?

在 nodejs 中开始下一个循环之前,等待每个 for 循环迭代完成

如何在下一个功能开始之前等待功能完成?

在开始下一个动作之前等待动作完成

在继续下一个动画之前,我如何等待此动画完成?

在 Angular 的循环中运行下一个服务之前,如何等待对我的控制器的每个服务调用?

在下一个开始之前等待上一个承诺的Javascript Map?

Java流在完成上一个之前开始下一个映射

角度5:如何等待服务完成,然后继续执行下一个任务?

如何告诉PowerShell在开始下一个命令之前先等待每个命令结束?

在执行下一个操作之前,如何等待请求完成(Xcode 11)

如何在执行下一个命令之前等待并行命令完成(Shell脚本)

.then是否在调用下一个方法之前等待setState完成?

在继续下一个之前,如何等待ajax调用完成?

如何在执行下一个之前等待函数完成?

Javascript在执行下一个命令之前不会等待JQuery动画完成

在执行下一个代码之前等待 forkjoin 完成

Kotlin-确保在开始下一个操作之前完成收集操作

等待异步Web服务调用响应以处理下一个Web服务ios

生成 ajax 调用的循环数组,我需要在下一个调用开始之前完成第一个调用

量角器 - 等待上一个它块在下一个之前完成

绅士,一个等待进程完成的 RxJs 计时器,在下一个间隔之前执行

在调用下一个函数之前,如何等待一个函数完成?

如何在继续下一个文件之前等待 openRead 函数在一个文件上完成?

等待Scala Future完成并继续下一个

为什么在ngUnsubscribe的“完成”之前“下一个”?

XmlHttprequest : 如何不让服务器等待下一个请求

在“ for”循环中使用Jquery promise()等待效果完成,然后再开始下一个效果

如何在开始下一个循环之前使Javascript循环等待现有迭代结束?