Docker 如何在supervisor中执行脚本?

Docker 如何在supervisor中执行脚本?,docker,hadoop,supervisord,Docker,Hadoop,Supervisord,我在docker的CMD中指定了start-all.sh。它按预期工作 全部启动。sh #!/usr/bin/env bash echo "It's Me Dear" /etc/init.d/hadoop-hdfs-namenode start /etc/init.d/hadoop-hdfs-datanode start /etc/init.d/hadoop-hdfs-secondarynamenode start /etc/init.d/hadoop-0.20-mapreduc

我在docker的CMD中指定了start-all.sh。它按预期工作

全部启动。sh

 #!/usr/bin/env bash

 echo "It's Me Dear"

 /etc/init.d/hadoop-hdfs-namenode start
 /etc/init.d/hadoop-hdfs-datanode start
 /etc/init.d/hadoop-hdfs-secondarynamenode start
 /etc/init.d/hadoop-0.20-mapreduce-tasktracker start

 sudo -u hdfs hadoop fs -chmod 777 /
 /etc/init.d/hadoop-0.20-mapreduce-jobtracker start

 /etc/init.d/flume-ng-agent start

 /bin/bash
我无法在supervisord中指定相同的文件。我试过了

 [program:long_script]
 command=bash /usr/local/start-all.sh
start-all.sh与模式777存在于同一文件中。我如何解决这个问题

 [program:job_tracker]
 command=bash -c "/etc/init.d/hadoop-0.20-mapreduce-jobtracker start"
它启动和退出。我检查了日志文件。它说许可被拒绝。我必须在同一个命令中添加
sudo-uhdfs-hadoop fs-chmod 777/

 command=bash -c "sudo -u hdfs hadoop fs -chmod 777 /;/etc/init.d/hadoop-0.20-mapreduce-jobtracker start"
它不起作用。我指定了两个命令,但这也不起作用。有什么想法吗

编辑

我的文件位于/usr/local/start-all.sh。如何确保主管查看的目录正确?

如果查看示例文件(下面的几个屏幕上没有该点的锚),您将看到如下内容:

directory=/tmp

您可以指定从哪个目录运行命令

supervisord还有一个用户选项

user=hdfs


如果supervisord以root用户身份运行,则此UNIX用户帐户将用作运行该程序的帐户。如果supervisord无法切换到指定的用户,程序将不会启动。

我尝试过。但它不起作用。但是
command=bash-c”/usr/local/start all.h“
做了我想做的事