supervisord退出并显示ENOEXEC错误

32

我试图使用supervisord运行一个Java进程,但是出现了以下错误:

couldn't exec /var/application/start_tester: ENOEXEC

start_tester的内容是:

java -Duser.dir=/var/application/ -cp /var/application/application.jar:/var/application/toepoke.jar com.application.Application

当我从控制台运行脚本时,应用程序按预期运行。以下是我的监管配置。
[program:application_tester]
directory=/var/application
command=/var/application/start_tester         ; the program (relative uses PATH, can take args)
log_stdout=true             ; if true, log program stdout (default true)
log_stderr=true             ; if true, log program stderr (def false)
logfile=/var/log/application_tester.log

当我从控制台运行脚本时,这是输出结果:
[root@monitor application]# ./start_tester 
20131009 203657: application starting up.
20131009 203657 (33): version 2.2.3
2个回答

61

您的文件需要可执行权限,因此有两种方法:

  1. 您可以使用 chmod +x 命令设置可执行位。
  2. 在文件开头添加 shebang。没有这个是导致 ENOEXEC 的原因。

或者

  1. 修改配置文件,将其改为类似于 command=sh /var/application/start_tester 的形式。

10
在我的情况下,缺少 shebang。 - Gagandeep Singh
谢谢Gagandeep。Shebang对我来说也是缺失的一行。我还要补充的是,在包括shebang行之后,您需要重新启用并重启supervisor才能使其工作:sudo systemctl enable supervisor sudo systemctl restart supervisor - folorunso joseph

20

在大多数情况下,shebang通常是缺失的。

  - #!/usr/bin/env bash
  - #!/bin/bash
  - #!/bin/sh
  - #!/bin/sh -

一旦您将shebang添加到gunicorn_start文件中(在DJANGO的情况下),请重新启动supervisor

sudo systemctl enable supervisor 
sudo systemctl restart supervisor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接