Upstart 如何在 MySQL 启动时自动启动一项作业?

Upstart 如何在 MySQL 启动时自动启动一项作业?

我的工作依赖于 MySQL。因此我希望我的工作可以在 MySQL 之后启动。

我读过新贵食谱我发现start on可以自动启动一项工作。

start on started mysql

并且它可以工作。但是我不希望 mysql 在启动后影响我的工作。当我停止工作时,它将通过重新启动 mysql 重新启动。如何避免这种情况?

答案1

在文件夹中创建一个锁定文件/tmp/来跟踪您的作业是否已运行。以下是一个例子:

  1. 创建这两个 upstart 作业配置文件:

    /etc/init/joba.conf

    # job A
    
    start on local-filesystems
    stop on runlevel[016]
    
    script
      /bin/echo job-A started >> /tmp/myjobs.log
      exec sleep 5
    end script
    

    /etc/init/jobb.conf

    # job B triggered after A
    
    start on started joba
    
    script
      /bin/echo job-B started >> /tmp/myjobs.log
      if ! [ -f /tmp/jobb.lock ]
      then
        /bin/echo " do job-B tasks" >> /tmp/myjobs.log
        /bin/touch /tmp/jobb.lock
      else
        /bin/echo " bypass job-B tasks"  >> /tmp/myjobs.log
      fi
      exec sleep 5
    end script
    
  2. 重启

  3. 检查cat /tmp/myjobs.logsudo tail -f /tmp/myjobs.log在另一个窗口中打开。
  4. 尝试再次运行作业 Asudo start joba
  5. 检查/tmp/myjobs.log,查看绕过说明:

    job-A started
    job-B started
     do job-B tasks
    job-B started
     bypass job-B tasks
    job-A started
    job-B started
    job-A started
     bypass job-B tasks
    

笔记:每次运行,我们都有 3 行。这里的行排序无关紧要。stdout缓冲问题,与 upstart 无关。作业按正确的顺序运行。

相关内容