cron
MAILTO
보고서를 받을 이메일 주소를 명시적으로 구성하는 설정이 있습니다.
at
비슷한 것이 있나요?
매뉴얼 페이지에는 send를 사용할 것이라고 나와 있지만 /usr/sbin/sendmail
어떤 대상 주소가 사용됩니까?
해당 컴퓨터에는 exim만 설치되어 있고 @로 보낸 이메일은 손실됩니다( .forward
받은 편지함에도 어떤 문자도 표시되지 않습니다).
답변1
at
Thomas Koenig의(현재)를 사용하고 있다고 가정합니다.Jose Kalaris가 관리함)는 가능하지만 명시적으로 문서화되지 않은 내용은 다음에서 유래합니다 at(1)
.
/var/run/utmp 파일을 사용할 수 없거나 손상된 경우 또는 at 호출 시 사용자가 로그인하지 않은 경우 환경 변수 LOGNAME에 있는 사용자 ID로 메일이 전송됩니다. 정의되지 않았거나 비어 있으면 현재 사용자 ID가 가정됩니다.
작동 방식은 처음 세 줄이 다음과 같은 at
작업 파일을 작성하는 것입니다 .atd
#!/bin/sh
# atrun uid=100 gid=100
# mail youruser 1
여기서 uid=100
, gid=100
및 는 youruser
작업을 생성할 때 프로그래밍 방식으로 결정됩니다. 사용자 이름을 결정하는 논리는 다음과 같습니다.
- 부르다
getlogin()
- NULL 호출인 경우
getenv("LOGNAME")
- 전화를 걸어 이름이 존재하는지 확인하세요.
getpwnam()
- NULL 호출인 경우
getpwuid(real_uid)
- NULL이면 모든 장난감을 유모차 밖으로 버립니다.
그렇다면 getlogin()
LOGNAME 변수를 사용하기 위해 NULL을 반환하도록 어떻게 설득할 수 있습니까? 한 가지 방법은 stdin을 정렬하는 것입니다.아니요터미널입니다(이것이 glibc가 getlogin()
다른 시스템에서 다르게 동작한다고 생각하는 이유입니다).
이렇게 하려면 다음을 수행하십시오 bash
.
LOGNAME=backup at 19:52 -m <<< uptime
echo uptime | LOGNAME=backup at 19:52 -m
요점은 리디렉션을 사용하여 표준 입력에서 실행될 명령을 표시하는 것입니다 at
. ( at
또한 실행다시 열다해당 옵션을 사용하는 경우 stdin의 옵션을 사용할 수 있지만 -f
여기서 사용하기에는 너무 늦었습니다. ) 명령을 파일에 저장하거나 bash를 사용하여 파일을 만들 수 있습니다.
LOGNAME=backup at 19:52 -m -f <( echo uptime ) 0<&-
( 0<&-
표준 입력 < /dev/null
도 꺼주세요)
터미널에서 이를 무시 screen
하면 ( 구성, 권한 또는 도우미 문제를 통해) 실패하므로 설정 하고 정상적으로 사용할 수도 있습니다. 터미널 찾기를 사용하여 해당 tty에 올바르게 로그인했는지 확인 하거나 를 시도해 보면 이러한 경우인지 알 수 있습니다 .tmux
utmp
LOGNAME
at
getlogin()
tty
w
perl -E 'say getlogin()||"not-in-utmp";'
(명확하게 말하면 LOGNAME은 로컬 사용자 이름만 될 수 있습니다. 이메일을 다른 곳으로 보내려면 aliases
// .forward
등을 사용해야 합니다 procmail
.)