Новый CLI дает нулевой вывод на stderr и stdout

Следующая проблема. Я получил этот сценарий оболочки:

#!/bin/sh

# Provide log for debugging
if [ ! -f /home/some-user/port-control.log ]; then
  touch /home/some-user/port-control.log
  chown some-user /home/some-user/port-control.log
fi

# Load environment variables for authentication
source /home/some-user/.openstack/nova-openrc.sh

# Open ports at login
if [ "$PAM_TYPE" = "open_session" ] && [ "$PAM_USER" = "some-user" ]; then
  echo "Opening ports ... Nova response:" >> /home/some-user/port-control.log
  nova --debug add-secgroup some-server some-secgroup &>> /home/some-user/port-control.log
fi

# Close ports at logout
if [ "$PAM_TYPE" = "close_session" ] && [ "$PAM_USER" = "some-user" ]; then
  echo "Closing ports ... Nova response:" >> /home/some-user/port-control.log
  nova --debug remove-secgroup some-server some-secgroup &>> /home/some-user/port-control.log
fi

Я использую этот скрипт, чтобы открывать / закрывать некоторые порты в моем брандмауэре при подключении / отключении через ssh, динамически добавляя уже настроенную секгруппу к моему серверу - по крайней мере, это идея. К сожалению, команды nova как-то не выполняются, я ничего не получаю в своем журнале. Теперь, так как у меня нет stderr, отладка довольно сложная. Что я делаю неправильно?

Когда я получаю учетные данные nova login и вручную выполняю команды nova вне скрипта, все работает отлично.

Кстати: если это поможет: я запускаю все это в контейнере докера на основе образа Ubuntu:14.04. Да, я знаю: если вы используете sshd внутри док-контейнера, вы делаете это неправильно. В этом случае есть причина для sshd;)

1 ответ

Как-то просто, но, наконец, я нашел ответ. Вот что я сделал:

С помощью ответа на другой вопрос в StackOverflow я перенаправил весь вывод скрипта в файл и понял, что переменные среды для аутентификации не были получены. Почему: потому что оболочка не знала source команда. Зачем? Потому что я был достаточно глуп, чтобы не проверять ту ведьму, которую использовал.

Проблема была просто исправлена ​​путем изменения #/bin/sh в #!/bin/bash, Тада!

Другие вопросы по тегам