at 명령에서 사용되는 이메일 주소를 재정의하는 방법

at 명령에서 사용되는 이메일 주소를 재정의하는 방법

cronMAILTO보고서를 받을 이메일 주소를 명시적으로 구성하는 설정이 있습니다.

at비슷한 것이 있나요?

매뉴얼 페이지에는 send를 사용할 것이라고 나와 있지만 /usr/sbin/sendmail어떤 대상 주소가 사용됩니까?

해당 컴퓨터에는 exim만 설치되어 있고 @로 보낸 이메일은 손실됩니다( .forward받은 편지함에도 어떤 문자도 표시되지 않습니다).

답변1

atThomas 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작업을 생성할 때 프로그래밍 방식으로 결정됩니다. 사용자 이름을 결정하는 논리는 다음과 같습니다.

  1. 부르다getlogin()
  2. NULL 호출인 경우getenv("LOGNAME")
  3. 전화를 걸어 이름이 존재하는지 확인하세요.getpwnam()
  4. NULL 호출인 경우getpwuid(real_uid)
  5. 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에 올바르게 로그인했는지 확인 하거나 를 시도해 보면 이러한 경우인지 알 수 있습니다 .tmuxutmpLOGNAMEatgetlogin()ttywperl -E 'say getlogin()||"not-in-utmp";'

(명확하게 말하면 LOGNAME은 로컬 사용자 이름만 될 수 있습니다. 이메일을 다른 곳으로 보내려면 aliases// .forward등을 사용해야 합니다 procmail.)

관련 정보