tty 없이 실행되도록 터미널에서 명령을 어떻게 실행할 수 있나요?

tty 없이 실행되도록 터미널에서 명령을 어떻게 실행할 수 있나요?

상태:cron으로 실행되도록 설계된 bash 스크립트가 있습니다. 터미널에서 스크립트를 테스트했는데 제대로 작동합니다. cron에 의해 실행되도록 스크립트를 구성하면 스크립트가 실패하기 시작합니다.

스크립트의 명령 중 하나를 실행하려면 cron 실행 환경에서는 제공되지 않는 TTY가 필요하다는 사실을 알아내는 데 많은 노력이 필요했습니다. (호기심에서 : docker-compose메시지와 함께 명령이 실패합니다 the input device is not a TTY)

질문:저는 여전히 cron용으로 구성하기 전에 터미널에서 쉘 스크립트를 테스트하는 방법을 찾고 싶습니다. cron에 의해 실행되는 것처럼 터미널에서 쉘 스크립트를 실행하는 방법이 있습니까? 좋다 cron run_my_command_now 'echo 123'. 아니면 스크립트가 터미널이 없다고 생각하도록 터미널에서 쉘 스크립트를 실행하는 방법이 있을까요?

답변1

IMO에서 가장 쉬운 방법은 아마도 ssh와 "-T"를 사용하여 의사 TTY를 비활성화하는 것입니다.

ssh -T localhost "command"

TTY 없이 실행되어야 합니다.

답변2

at(1) 매뉴얼 페이지를 참조하십시오.

at -f /path/to/script_or_command now +5 min

또는 이와 유사한 것(EOT는 Ctrl-D입니다):

$ at 16:05
warning: commands will be executed using /bin/sh
at> source /my/environment/file
at> /path/to/script 
at> <EOT>
job 1 at Mon Feb 14 16:05:00 2022

관련 정보