저는 crontab을 사용하여 모든 사용자에게 메시지를 보내고 있습니다.
나는 썼다
*/1 * * * * wall $(bash some_shell_script.sh)
Ctrl+D그런데 문제는 메시지를 끝내려면 항상 버튼을 눌러야 한다는 것입니다 .
이 문제를 어떻게 해결할 수 있나요?
답변1
명령 wall
은 의 컨텍스트에서 실행됩니다 cron
. 그것은 그 일을 하고 종료됩니다.
수신 디스플레이 장치(단말기)에서는 에서 알림을 받게 됩니다 wall
. 이 알림은 터미널에서 수행하는 작업과 무관하므로 알림 메시지가 전송되는 동안 명령줄 프롬프트에 조용히 앉아 있으면 프롬프트를 덮어쓰지 않습니다. 프롬프트를 다시 보내려면 Enter 키를 눌러야 한다는 것을 알 수 있지만 실제로는 이것이 필요하지 않습니다. 일반적으로 명령을 입력하면 됩니다.
장면 타임라인
- 로그인되어 명령 프롬프트에 앉아 있습니다.
- 단말기로 알림이
wall
전송되었습니다 - 입력
ls
하고(클릭합니다.입력하다)
3단계에서는 눈에 띄는 프롬프트가 표시되지 않지만 셸은 여전히 사용자 명령을 기다리고 있습니다.
crontab
아니면 실제로 명령을 종료하는 방법에 대해 이야기하고 있을 수도 있습니다 . 이 예에서는 Ctrl/D를 사용하여 입력이 끝났음을 나타냅니다.
상상하다
crontab
- 당신은 줄을 입력
*/1 * * * * bash some_shell_script.sh | wall
- Ctrl/D를 눌러
crontab
명령에 대한 데이터 입력을 종료합니다.
3단계의 Ctrl/D는 이와 아무 관련이 없습니다 wall
. 또한 이 항목은 crontab
1분마다 명령을 반복합니다. wall
이것이 정말로 당신이 원하는 것인가요?
답변2
GNU 화면을 사용하면 종료하지 않고 백그라운드 프로세스를 격리할 수 있습니다.
- 배포판에 GNU Screen 설치
screen -R wall
wall $(bash some_shell_script.sh)
- Ctrl-A, Ctrl-D