2014-10-02 41 views
3

我每次執行一個特定的cronjob時候,我發現了以下郵件。被調用的腳本運行良好時,我直接調用它,甚至從cron。所以我得到的消息不是一個實際的錯誤,因爲腳本完全按照它應該做的事情做。「標準輸入:是不是tty」從的cronjob

這裏是cron.d項:

* *  * * *  root /bin/bash -l -c "/opt/get.sh > /tmp/file" 

和get.sh腳本本身:

#!/bin/sh 

#group and url 
groups="foo" 

url="https://somehost.test/get.php?groups=${groups}" 

# encryption 
pass='bar' 
method='aes-256-xts' 
pass=$(echo -n $pass | xxd -ps | sed 's/[[:xdigit:]]\{2\}/&/g') 

encrypted=$(wget -qO- ${url}) 
decoded=$(echo -n $encrypted | awk -F '#' '{print $1}') 
iv=$(echo $encrypted | awk -F '#' '{print $2}' |base64 --decode | xxd -ps | sed 's/[[:xdigit:]]\{2\}/&/g') 

# base64 decode input and save to file 
output=$(echo -n $decoded | base64 --decode | openssl enc -${method} -d -nosalt -nopad -K ${pass} -iv ${iv}) 

if [ ! -z "${output}" ]; then 
     echo "${output}" 
else 
     echo "Error while getting information" 
fi 

當我不使用bash -l語法期間wget的過程腳本掛起。所以我的猜測是它與wget有關,並將輸出放到標準輸出中。但我不知道如何解決它。

+0

你使用代理? – Cyrus 2014-10-02 09:18:00

+0

是我使用代理服務器通過HTTP_PROXY變量設置。 – Kai 2014-10-02 09:18:47

+0

哦,等等,我認爲,我們正在這裏的某個地方。我通過它獲得通過/ etc/profile文件包含在/etc/profile.d中文件中設置代理。也許這只是在「正常」cronjob調用期間不可用? – Kai 2014-10-02 09:23:42

回答

7

你實際上有兩個問題在這裏。

  1. 爲什麼打印stdin: is not a tty

此警告消息由bash -l打印。 -l--login)選項要求bash啓動登錄shell,例如,通常在您輸入密碼時啓動的那個。在這種情況下bash預計其stdin是一個真正的終端(例如在isatty(0)調用應該返回1),如果它是由cron - 因此這個警告的情況下這不是真的。

另一種簡單的方法來重現此警告,並且很常見的一種,是通過ssh運行此命令:

$ ssh [email protected] 'bash -l -c "echo test"' 
Password: 
stdin: is not a tty 
test 

這是因爲ssh不分配終端時的命令作爲參數調用(在這種情況下,應該使用-t選項ssh強制終端分配)。

  1. 爲什麼沒有-l

正如@Cyrus在註釋中正確指出的那樣,bash在啓動時加載的文件列表取決於會話的類型。例如。對於登錄shell,它將加載/etc/profile,~/.bash_profile,~/.bash_login~/.profile(請參見手冊bash(1)中的INVOCATION),而對於非登錄shell,它只會加載~/.bashrc。看起來你只在一個加載登錄shell的文件中定義了你的http_proxy變量,但不是在~/.bashrc中。你把它移到~/.wgetrc,這是正確的,但你也可以在~/.bashrc中定義它,它會工作。

+0

感謝您指出的細節。 – Kai 2014-10-08 14:53:40

0

我最終把代理配置在wgetrc。現在不再需要在登錄shell上執行腳本。

這是不是一個真正的答案的實際問題,但它解決了我的。

如果你碰到這個問題檢查,如果你是因爲你希望得到所有設置環境變量。感謝Cyrus讓我走向正確的方向。

1

在你的。個人資料,更改

mesg n 

if `tty -s`; then 
    mesg n 
fi 
相關問題