사용자 프롬프트가 필요한 크론 작업은 어떻게 되나요?

사용자 프롬프트가 필요한 크론 작업은 어떻게 되나요?

다음을 통해 C 프로그램을 실행한다고 가정해 보겠습니다 crontab -e.

15 11 * * * time /home/philip/school/a1_c_program.c > /home/philip/logs/time2execute.txt

그러나 C 프로그램에서는 사용자가 일부 텍스트를 입력해야 합니다.

이 상황에서는 어떻게 되나요? C 스크립트는 재부팅할 때까지 내 컴퓨터에서 열린 프로세스로 유지됩니까? 아니면 시간이 지나면 자동으로 종료되나요?

프로세스에 연결하고 필요한 텍스트를 입력할 수 있다면 time 명령 실행이 완료되고 새로 생성된 텍스트 파일에 내용이 인쇄됩니까?

위의 cronjob 파일이 time2execute.txt생성되었지만 비어 있는 것을 확인했습니다.

편집: 소스 파일 대신 컴파일된 C 프로그램을 가리키도록 crontab을 수정했습니다. 이 텍스트 파일에는 사용자에게 표시되는 프롬프트 텍스트가 포함되어 있습니다.

답변1

croncron 데몬이 실행하는 도구는 쉘이 아닌 환경을 가져옵니다. 이러한 도구에 표준 입력을 제공 하지 않고 장치에서 가짜 입력을 cron제공합니다 ./dev/null

따라서 도구에 표준 입력이 필요한 경우 입력 데이터를 읽으려고 하면 파일 끝 오류가 발생합니다. 도구와 사용 목적에 따라 다릅니다. 대부분의 경우 다음을 사용하여 프로그램을 호출하여 실행하는 것과 동일합니다.

programname </dev/null

ncurses터미널(예: 애플리케이션) 을 직접 읽으려고 하면 터미널 초기화 시퀀스가 ​​작동하지 않습니다. 이 ncurses_init()호출은 잘못된 결과를 제공합니다. 이 경우 잘못된 결과를 처리하는 방법도 도구에 따라 다릅니다. 대부분의 도구는 오류 메시지와 함께 종료됩니다. 이 오류 메시지를 처리하는 방법은 구성 에 따라 다릅니다 cron(기본적으로 오류 메시지를 기록하고 이메일로 보냅니다).

참고 사항: cron배선이 잘못되어 .c소스 코드를 직접 실행하려고 합니다. 먼저 이를 바이너리 실행 파일로 컴파일해야 합니다. 또한 시간 도구는 출력을 표준 오류로 설정하므로 해당 출력(및 표준 오류)을 일부 로그 파일로 리디렉션하는 것이 좋습니다.

관련 정보