我有一组服务器,我想在每台服务器上启动专用的 Python 脚本。 我的计算机名称列表存储在 $COMPUTERS 变量中,为了部署我的脚本,我尝试使用 SSH 连接并启动 screen 实例
for ((i = 0; i < ${#COMPUTERS[@]}; i++)); do
echo ""
echo ">> Start simulations on computer ${COMPUTERS[i]}..."
ssh -o "StrictHostKeyChecking=accept-new" ${COMPUTERS[i]} "
cd ${WORKING_DIRECTORY}/compressor && git pull;
screen -S ${SCREEN_NAME} -X quit > /dev/null;
echo 'Start screen ${SCREEN_NAME} on ${COMPUTERS[i]}';
screen -dmS ${SCREEN_NAME} ' \
export LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:${WORKING_DIRECTORY}/venv/lib/\" && \
${WORKING_DIRECTORY}/venv/bin/python ${WORKING_DIRECTORY}/deployment/simulations/simulate.py ${i} > ~/output_${COMPUTERS[i]}.txt \
';
screen -r;
"
echo "Done for ${COMPUTERS[i]}"
done
但是,没有启动 screen 实例,我唯一的消息是:
Start screen sim on pc-elec.priv
Must be connected to a terminal.
最佳答案
您需要强制伪终端。
-t' Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
例如:
ssh -t -o "StrictHostKeyChecking=accept-new" ${COMPUTERS[i]}
关于bash - 无法通过 ssh 执行 screen : Must be connected to a terminal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72531848/