데몬으로서의 Netcat

데몬으로서의 Netcat

장치에 원격으로 로그인하고 출력을 파일로 저장할 수 있는 기능을 설정하려고 합니다. CLI에서는 실행할 수 있지만 시작 시에는 실행할 수 없습니다(crontab 사용).

이는 명령줄에서 실행할 수 있습니다:

$ nc <host> <port> | tee -a ~/log.txt

문제는 cron을 사용하여 시스템 시작 시 이를 실행하는 것입니다. nc 자체는 cron으로 실행되지 않으므로 screen -d -m에서 실행했는데 열려 있었습니다.

screen -d -m nc <host> <port> | tee -a ~/log.txt

그러나 파일에는 출력이 없습니다. 나는 또한 다음을 시도했습니다.

screen -d -m nc <host> <port> 2>&1 | tee -a ~/log.txt

여전히 파일에 아무것도 출력되지 않습니다... 일부 사람들은 nc에서 -d 플래그를 사용하도록 권장하는 것을 보았지만 -d는 다른 사람들이 말했듯이 "STDIN 무시"가 아니라 CentOS 7에서 지연 설정인 것 같습니다.

답변1

체계화된 서비스를 만드는 것이 저에게 효과적이었습니다. --recv-only 플래그가 없으면 nc가 즉시 종료됩니다. 이렇게 하면 예상대로 실행되는 것 같습니다.

[Unit]
Description=test

[Service]
ExecStart=/bin/sh -c 'nc -t --recv-only 10.215.83.80 3004 >> /home/hursjohn/log.txt'

[Install]
WantedBy=multi-user.target

답변2

귀하의 질문에 이해하기 어려운 내용이 있습니다.

시스템 시작 시 cron을 사용하여 실행

부팅 시 실행되도록 하려면 systemd를 사용하여 몇 가지 마법을 수행하거나(Redhat 및 그 추종자의 경우 Centos는 vs 7 이후로 굴복함) rc.local에 넣습니다(Unix 또는 Unix 계열 시스템의 경우). cron(또는 더 정확하게는 crontab)에 넣으면 주기적으로 실행됩니다.

nc또한 왜 개행 명령이 필요한지 이해하지 못합니다 screen. 가능할 수도 있지만 불필요한 과잉 공격처럼 보입니다.

시스템 시작 시 이를 실행하려는 경우 일반적으로 사용할 수 있는 표준 출력이 없으므로 그것도 tee나쁜 생각입니다. 그리고 init 스크립트를 종료하려면 nc백그라운드에서 실행해야 합니다.

그래서 나는 당신이 넣는 것을 제안합니다

nohup nc <host> <port> > /home/you/log.txt &

시작시 실행되는지 확인 rc.local하십시오 .sudo systemctl edit --full rc-localrc.local

관련 정보