cronjob 可以在 MySQL 启动之前启动吗?

cronjob 可以在 MySQL 启动之前启动吗?

我在 CentOS 7 上,如果我输入:

* * * * * python script.py

有用。

如果我输入:

@reboot python script.py

然后它说无法连接到 MySQL。

如果我也从命令行运行它,它就可以工作。

仅当我这样做时,脚本才不起作用@reboot。 cronjob 有可能在 MySQL 之前启动吗?

答案1

是的,这是可能的(而且很有可能)。

一个粗暴的解决方案是指示你的脚本休眠一段时间。例如,将你的 cron 行更改为如下内容:

* * * * * sleep 60; python script.py

这将等待 60 秒,这应该给 MySQL 启动的时间。

如果你必须绝对确保 mysql 进程在你的脚本运行之前启动,你可以编写一个像这样的 shell 包装器脚本(我们称之为custom_wrapper):

/bin/bash #!/bin/bash
while true; 执行
  运行=`ps ax | grep mysql`;
  如果 [ $running -eq 0 ]; 那么
    python 脚本.py
    退出 $?
  睡 5
完毕

然后,将其设置为可执行文件(chmod +x custom_wrapper)并按如下方式修改您的 cron 行: * * * * * custom_wrapper

自定义包装脚本等待 MySQL 进程变为活动状态,然后执行您的 python 脚本并退出。

答案2

是的,cron守护进程可以在mysql完成(甚至开始)其启动过程之前很容易启动。

答案3

是的,这绝对是可能的。Cron 是每个系统上的重要服务,并且很可能在 MySQL 等服务之前启动。

虽然可以改变顺序,但如果您不小心,这可能会搞砸您的系统。更好的选择是只在您的 cron 脚本中添加延迟,以便它等待足够长的时间以便 MySQL 运行(例如 60 秒)。

答案4

我感觉您正在尝试使用 cron 作为进程管理器。(@reboot一次,* * * * *而每分钟)。

更好的想法1:

使用 systemd(我认为是 EL 7 系统正在使用的,我自己还没有真正使用过它)。

更好的想法2:

有一个启动服务并管理锁定文件的初始化脚本(/var/log/subsys/SERVICE 是最好的,因为初始化脚本需要在 RHEL 框中管理该文件(至少在 7 之前是这样的,不确定在 7 中是否仍然如此)。

然后,从 crond(或您正在使用的任何配置管理系统,例如 cfengine、puppet、chef 等)调用/sbin/service SERVICE ensure-started (其中ensure-started可能是您​​添加的一些内容。我不记得是否condrestart要这样做......)。

PS. 可以在 RHEL 系统上的 /usr/share/doc/sysvinit* 或类似目录中找到有关 init-scripts 的文档。

相关内容