Cron Bash 스크립트가 /var/spool/mail/root 대신 현재 세션 터미널에 에코될 수 있습니까?
로그 파일에 오류를 기록하는 스크립트가 있지만 보충/중요하지 않은 정보가 터미널에 반영됩니다.
cron에서 루트로 스크립트를 실행하면 메시지가 터미널 대신 /var/spool/mail/root로 리디렉션됩니다.
스토리지 대신 루트나 다른 사용자가 로그인한 경우 터미널에 표시되도록 하고 싶습니다. 아무도 로그인하지 않았을 때 이러한 메시지가 사라지더라도 괜찮습니다. Cisco IOS와 마찬가지로
답변1
에서 실행할 때 "현재 터미널"이 없습니다 cron
.
기본적으로 cron
작업 출력이 포함된 이메일이 전송됩니다. 로컬 메일 하위 시스템은 이를 파일로 전송합니다 . 이 파일은 이나 선호하는 로컬 이메일 클라이언트를 /var/spool/mail/$USER
사용하여 읽을 수 있습니다 .mail
mailx
cron
다음과 같이 작업의 출력을 홈 디렉터리의 파일에 쓰도록 할 수 없는 특별한 이유는 없습니다 .
* * * * * date >$HOME/.current_date 2>&1
GUI를 실행하는 경우 GUI를 사용하여 notify-send
화면의 팝업에 메시지를 쓸 수 있습니다. 그러나 그것 을 만들어 내는 것은 간단 하지 않습니다 cron
. 하나 있다찾다StackExchange 주변해결책이 하위 질문에.
tty에 쓰고 싶다면 실제로 와 같은 것을 사용할 수 있습니다 echo hello, world >/dev/tty1
. 쓰기 전에 실제로 올바른 계정에 로그인했는지 확인하고 싶을 수도 있습니다 /dev/tty1
(이는 장치의 소유권을 확인하여 수행할 수 있습니다 stat -c %U /dev/tty1
).
#!/bin/bash
#
me=roaima # userid to write messages to
log()
{
local tty owner
for tty in $( who | awk -v me="$me" '$1 == me {print $2}' )
do
owner="$( stat -c %U "/dev/$tty" 2>/dev/null )"
[[ "$me" = "$owner" ]] && echo "$@" >"/dev/$tty"
done
}
# ...
log "hello, world"
log "this is a message for you to read RIGHT NOW"
exit 0
그러나 이 명령을 사용하는 것이 더 좋습니다 write
. 예를 들어 로그인 터미널에 "roaima" 사용자를 쓰려면 다음을 수행합니다.
* * * * * echo hello from cron | write roaima >/dev/null 2>&1
답변2
당신은 그것을 사용할 수 있습니다쓰다특정 로그인 사용자에게 텍스트를 보내는 유틸리티입니다.
command that produces output | write root
설명서에서는 다음을 추가로 설명합니다.
여러 번 로그인한 사용자에게 쓰려면 터미널 매개변수를 사용하여 쓸 터미널을 나타낼 수 있습니다. 그렇지 않으면 수신자의 터미널이 구현 정의 방식으로 선택되고 정보 메시지가 발신자의 표준 출력에 기록됩니다. 어떤 터미널이 선택되었는지 표시합니다.
Red Hat/CentOS에서 구현 정의 접근 방식은 유휴 시간이 가장 짧은 터미널을 선택하는 것입니다.
로그인할 수 있는 여러 사용자 중 한 명에게 쓰기를 원할 경우 다음을 수행할 수 있습니다.
for u in root alice bob charlie
do
if users|grep -w -q $u
then
user=$u
break
fi
done
if test -n "$user"
then
command that produces output | write $user
fi