이 at
명령에는 이상한 동작이 있으며 이유를 찾을 수 없습니다.
이야기 -3일 후 특정 시간에 이메일을 보내 누군가를 놀라게 해야 합니다. 비행기에 20시간 정도 있을 예정이라 모든 것이 제대로 돌아가고 있는지 모니터링은 할 수 없을 것 같아요. 모든 것이 완벽하게 실행될 것입니다. :-)
스크립트 -at
나중에 실행하기 위해 작업을 대기열에 추가하기 위해 이 명령을 사용하고 있습니다 . 나는 다음 형식으로 여러 개의 파일(각 메일당 하나씩)을 만들었습니다.
mail1.txt의 내용(예)
This is a subject
This is a message...
... on several lines
이것은 내 스크립트입니다.
#!/bin/bash
function sendit {
FROM_MAIL="[email protected]"
RCPT_MAIL="[email protected]"
SUBJECT=$(head -n 1 $1)
MESSAGE=$(tail -n +2 $1)
echo -e "$MESSAGE" |mail -s "$SUBJECT" -r $FROM_MAIL $RCPT_MAIL
}
# Note, time is EDT, it correspond to the date of my server
sendit mail1.txt|at 02:37 May 03
sendit mail2.txt|at 02:38 May 03
sendit mail3.txt|at 03:13 May 03
[...]
그런 다음 스크립트를 실행합니다.
$ bash script.sh
warning: commands will be executed using /bin/sh
job 35 at Tue May 3 02:37:00 2016
warning: commands will be executed using /bin/sh
job 36 at Tue May 3 02:38:00 2016
warning: commands will be executed using /bin/sh
job 37 at Tue May 3 03:13:00 2016
[...]
모든 것이 완벽해 보였지만 몇 분 후 메일을 확인해보니 메일 중 일부가 이미 전송된 상태였습니다... (무작위로 보임)
어떤 아이디어가 있나요?
답변1
|
왼쪽 프로세스의 표준 출력을 오른쪽 명령으로 보냅니다 . 귀하의 sendit 함수는 실제로 메일을 보내지만 stdout에서는 많은 출력을 생성하지 않으므로(실제로 출력이 무엇인지 기억나지 않습니다 mail
) 입력은 at
메일을 보내는 명령이 아닙니다.
사용자로서 일반적으로 다음을 at
사용한다는 점을 고려하십시오.
at 02:37 May 03 # This will read commands from stdin until Ctrl/D
sendit mail1.txt
Ctrl/D
sendit
프로그래밍 방식으로 명령을 다음으로 파이프 할 수도 있습니다 at
.
echo 'sendit mail1.txt' | at 02:37 May 03
답변2
내 생각엔 echo sendit mail1.txt|at 02:37 May 03
.