我有一个非常奇怪的问题,我似乎无法弄清楚。
当我在 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 命令以强制搜索引擎将更新轮换到生产中。
我确实安装了 Fabric(因此是本地命令),但为了避免必须创建第二个文件,我希望一行代码可以允许我在远程服务器上执行 sudo 命令。
有人可以帮我吗?
最佳答案
我找到了答案,对于后台运行的脚本中的 ssh 命令,您需要使用 -t -t
来强制使用伪终端。
引用:
Pseudo-terminal will not be allocated because stdin is not a terminal
关于python - 在通过 crontab 调用的脚本中运行 ssh/rsync 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593242/