我有一个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如何确保主管是否正在查看正确的目录?
答案 0 :(得分:1)
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.