Nova CLI 在 stderr 和 stdout 上產生零輸出

Nova CLI 在 stderr 和 stdout 上產生零輸出

以下問題。我得到了這個shell腳本:

#!/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 連接/斷開連接時,我使用此腳本打開/關閉防火牆中的某些端口,方法是動態地將已配置的 secgroup 添加到我的伺服器 - 至少是這樣。不幸的是,nova 命令似乎根本沒有執行,我的日誌中沒有任何東西得到。現在,由於我沒有 stderr,所以調試有點困難。我究竟做錯了什麼?

當我獲取 nova 登入憑證並在腳本之外手動執行 nova 命令時,一切都運作得很好。

順便說一句:如果有幫助的話:我正在基於 Ubuntu:14.04 映像的 docker 容器內運行所有這些。是的,我知道:如果您在 docker 容器內使用 sshd,那麼您的做法是錯誤的。在這種情況下,sshd 是有原因的;)

答案1

不知何故簡單,但最終我找到了答案。這就是我所做的:

在一個人的幫助下回答 StackOverflow 上的另一個問題我將腳本的整個輸出重定向到一個文件,並意識到用於身份驗證的環境變數沒有獲取來源。原因:因為 shell 不知道該source指令。為什麼?因為我太蠢了,沒有檢查我正在使用的女巫外殼。

#/bin/sh透過更改為簡單地解決了該問題#!/bin/bash。田田!

相關內容