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

1 投票
1 回答
1486 浏览
提问于 2025-04-17 20:05

我遇到了一个很奇怪的问题,搞不清楚怎么回事。

当我在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搜索引擎更新同步到远程服务器,然后第二行代码是用来在远程服务器上强制搜索引擎把更新应用到生产环境中。

我已经安装了fabric(所以可以在本地执行命令),但为了不需要再写一个文件,我希望能用一行代码在远程服务器上执行sudo命令。

有没有人能帮我解决这个问题?

1 个回答

1

我找到了答案,想要在后台运行的脚本中使用ssh命令,你需要加上 -t -t,这样可以强制分配一个伪终端。

参考链接:

伪终端不会被分配,因为标准输入不是一个终端

撰写回答