python - 在通过crontab调用的脚本中运行ssh / rsync命令

时间:2013-03-23 23:19:52

标签: python ssh rsync fabric

我有一个非常奇怪的问题,我似乎无法弄明白。

当我在SSH终端(putty)中执行包含以下行的python脚本时,它可以正常工作。但是,当我通过crontab或nohup python myscript >/dev/null 2>&1&运行脚本时,它似乎没有执行这些命令。

subprocess.call('rsync -avr /path/to/folder/. --include "delta.*" --exclude "*" -e "ssh -o StrictHostKeyChecking=no -i /path/to/key.pem" ec2-user@'+server+':/path/to/folder/', shell=True)
local('ssh -t -o StrictHostKeyChecking=no -i /path/to/key.pem ec2-user@'+server+' "sudo /usr/bin/indexer -c /path/to/sphinx.conf --merge main delta --rotate"')

基本上以上所做的就是将文件夹与新的sphinx搜索引擎更新同步到远程服务器,然后第二行运行远程ssh命令以强制搜索引擎将更新轮换到生产中。

我确实安装了结构(因此是本地命令)但是为了避免必须构建第二个文件,我希望单行代码可以允许我在远程服务器上执行sudo命令。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

我找到了答案,对于在后台运行的脚本中的ssh命令,你需要让-t -t来强制伪终端。

参考:

Pseudo-terminal will not be allocated because stdin is not a terminal