터미널을 닫아도 종료되지 않는 명령 실행

터미널을 닫아도 종료되지 않는 명령 실행

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.

관련 정보