领事:运行状况检查无法调用:fork/exec 但手动调用 运行

Consul : Health Check is failed to invoke: fork/exec but running manualy

我运行这个命令

/usr/bin/mysqladmin ping --host=192.168.56.35 --port=6033 --user=root --password=123

上面写着

mysqld is alive

但是当我在健康检查中添加它时

   "check": {
     "args": ["/usr/bin/mysqladmin ping --host=192.168.56.35 --port=6033 --user=root password=123"],
     "interval": "3s"}
   }

日志说

[ERR] agent: Check "service:proxy2" failed to invoke: fork/exec /usr/bin/mysqladmin ping --host=192.168.56.35 --port=6033 --user=root password=123: no such file or directory

我该如何解决?

"args" - 应该是一个字符串数组。 Consul 将您的单个字符串视为要执行的命令,忽略空格。

您的支票应如下所示:

   "check": {
     "args": ["/usr/bin/mysqladmin", "ping", "--host=192.168.56.35", "--port=6033", "--user=root", "password=123"],
     "interval": "3s"}
   }

您可以选择使用以下代替,因为字符串被传递给 /bin/sh 它不必分成子字符串。 (Consul Checks 中的大多数示例都使用此语法,因此它应该最终有效):

   "check": {
     "args": ["/bin/sh", "-c", "/usr/bin/mysqladmin ping --host=192.168.56.35 --port=6033 --user=root password=123"],
     "interval": "3s"}
   }

还要确保 Consul 代理进程 运行 下的用户能够执行 /usr/bin/mysqladmin 否则你会得到权限被拒绝的错误。