MQTT를 사용하여 통신하는 원격 장치에 SSH를 사용하여 로그인하려고 하는데, 명령을 실행하는 동안 터미널을 열어두지 않고도 원격으로 장치에 로그인할 수 있기를 원합니다. 현재 아래와 같이 명령을 실행하고 있는데 랩톱을 터미널에 연결한 상태로 유지하지 않으면 명령을 실행할 수 없습니다.
(nohup "command" &) 사용과 같은 솔루션에 대해 읽었지만 아래 코드에서 작동하도록 할 수 없습니다.
mosquitto_sub -v -u Test -P Test123 -t '#' | while read -r line ; do
echo -e "$(date "+%Y-%m-%d %H:%M:%S") $line"
done | tee -a MQTT.txt
요약하자면, 위의 코드를 실행하고 터미널에서 프로세스를 분리하여 터미널이 연결되지 않은 상태에서 계속 실행되도록 하고 싶습니다. nohup을 사용하면 이것이 가능하다고 생각하지만 여전히 메시지를 로컬 파일에 기록해야 합니다. , 나중에 검토하겠습니다. 이를 위해 위의 코드를 어떻게 변경할 수 있습니까?
답변1
당신은 쓸 수 있습니다
nohup bash -c 'mosquitto_sub -v -u Test -P Test123 -t "#" | while read -r line ; do
echo -e "$(date "+%Y-%m-%d %H:%M:%S") $line"
done | tee -a MQTT.txt'
그러나 당신이 정말로 원하는 것은 screen
또는 입니다 tmux
. 이 프로그램을 사용하면 명령을 실행하고, 로그아웃하고, 로그인한 후 이전의 "닫힌" 터미널에 연결할 수 있습니다.
귀하의 예에서 매우 기본적인 화면 세션은 다음과 같습니다.
screen
mosquitto_sub -v -u Test -P Test123 -t '#' | while read -r line ; do
echo -e "$(date "+%Y-%m-%d %H:%M:%S") $line"
done | tee -a MQTT.txt
# Hit "Ctrl-a d", it will detach the screen
이제 터미널을 닫고 로그아웃한 후 로그인하고 다시 실행할 수 있습니다 screen -R
.