28

我正在尝试使用 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
4

2 回答 2

54

您的文件必须是可执行的。所以要么:

  1. 您应该chmod +x设置可执行位。
  2. 在文件的开头放一个shebang。没有这个是导致ENOEXEC.

或者

  1. 将您的配置文件修改为类似command=sh /var/application/start_tester.
于 2013-11-05T12:25:56.433 回答
13

在大多数情况下,shebang 通常会丢失。

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

一旦你将 shebang 添加到你的 gunicorn_start 文件(在 DJANGO 的情况下),重新启动主管

sudo systemctl enable supervisor 
sudo systemctl restart supervisor
于 2019-03-08T21:39:35.253 回答