【问题标题】:Monit syntax error When reading shell script in /etc/monit.d/在 /etc/monit.d/ 中读取 shell 脚本时,Monit 语法错误
【发布时间】:2017-10-26 18:53:50
【问题描述】:

尝试通过 shell 脚本运行 PHP 脚本,并在读取 shell 脚本时不断从 Monit 收到“语法错误”。

launchQueue.sh

#!/bin/sh
php /var/app/current/hello.php

shell 脚本将自行运行,并且我已打开所有权限。 Monit 从它自己的目录 /etc/monit.d/* 调用它——它应该在 monit 启动时运行其中的所有文件。

确切的错误为:“/etc/monit.d/launchQueue.sh:2: Error: syntax error 'php'”

  • 按照this post 的建议,我已将它从monit.d 中移出,但我得到了同样的错误。

运行监视器版本 5.2.5

【问题讨论】:

  • 对于初学者来说,您在#!/bin/sh 中缺少!
  • 我有“!”在那里,它是在堆栈中插入时的一种类型。
  • 您的错误是指launchQueue.sh,但您的示例显示launchHello.sh。您在此处显示的内容是否与导致此错误的文件相同?您确定上一行的末尾没有隐藏的回车符 (\r)(您可以检查 od -a <filename> 并在输出中查找“cr”)?
  • 是的,对不起。 launchQueue = launchHello - 这是漫长的一天。这已经占据了大部分......你提到的那个堆栈问题是我说的时候所指的那个,我已经从monit.d中取出了sh脚本。

标签: bash shell monit


【解决方案1】:

Monit 有它自己的PATH,而且它非常小PATH。您应该为您的 php 可执行文件提供完整路径或在脚本中重新定义 PATH。

尝试(根据您的位置调整)

#!/bin/sh /usr/bin/php /var/app/current/hello.php

【讨论】:

  • 我试过了,但是没有用。我想我想通了(在答案中)。
【解决方案2】:

我弄清楚了问题所在,这主要是由于我自己对使用终端的无知(我是新手)。我安装了 SupervisorD 并遇到了类似的问题。原来我的根 $PATH 不包括普通用户 (?) $PATH。一旦我将 PATH 导出到 root,它运行得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多