장치에 원격으로 로그인하고 출력을 파일로 저장할 수 있는 기능을 설정하려고 합니다. 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-local
rc.local