我如何在主pipe中执行脚本?

我有一个start-all.sh我指定它在docker的CMD。 它按预期工作。

start-all.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 -u hdfs 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如何确保主pipe是否正在查看正确的目录?

http://supervisord.org/configuration.html#program-x-section-settings

如果您查看示例文件(多个屏幕,它们没有锚点),您将看到如下所示的内容:

directory=/tmp

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

还有supervisord的用户选项。

user=hdfs

If supervisord runs as root, this UNIX user account will be used as the account which runs the program. If supervisord can't switch to the specified user, the program will not be started.