我有一个 bash 脚本,用于重新启动每凌晨 3 点运行一次的服务,以确保用户需要时该服务不会崩溃。但是,我需要为我的合作伙伴(不是 IT 领域的)提供一种更简单的方法,以便在出现问题时运行此脚本。
有什么方法可以配置此脚本,使其在电子邮件发送到某个地址时运行?
答案1
绝对地!
在您的 /etc/aliases 文件中,执行以下操作:
servicerestart: |/usr/local/bin/kickservice
... 电子邮件将被发送到哪里[email protected]
,您编写的脚本就是上面的路径。电子邮件和所有标题将被传递到stdin
您的脚本,您可以根据需要对其进行处理(查找密码等)
答案2
如果 MTA 遵循 ~/.forward 文件,那么你可以进程邮件处理收到的邮件并在邮件到达时立即运行脚本。
看http://www.panix.com/~elflord/unix/procmail.html
对于我的一个帐户,我有以下 ~/.procmailrc
# procmail tutorial: http://tldp.org/LDP/LG/issue14/procmail.html
PATH=/usr/local/bin:/bin:/usr/bin
MAILDIR=$HOME/Mail
DEFAULT=$HOME/Mail/inbox
LOGFILE=$HOME/procmail.`date +%Y-%m`.log
SHELL=/usr/bin/ksh
MY_XLOOP='X-Loop: [email protected]'
MY_RECIPIENT='[email protected]'
#############################################################################
# 3rd party request processing
# send a copy of the message to the processing script, and carry on
# with the next recipe
:0c
* ^From:.*@3rdparty\.invalid
* ^Subject:.*ABC/DEF.*(Request|Access|Approval)
| $HOME/bin/process_request_email.pl | \
mailx -s "3rd party request results" $MY_RECIPIENT
#############################################################################
# forward all mail to mailing list
:0
* ! ^$MY_XLOOP
{
# add a header
# 'f' = filter: continue processing results of program
# 'w' = wait for program to return
# 'h' = pass message headers to program
:0fwh
| formail -A "$MY_XLOOP"
# then forward the message
# 'c' = send a copy to recipient and continue processing
:0c
! $MY_RECIPIENT
}
# if we get here, then the message has an X-Loop header.
# let it fall into $DEFAULT
答案3
绝对地。
你需要:
- 一个 MTA 来接收这些邮件,
- 处理邮件的处理器,
- 规则和限制,以确保它不会被轻易滥用
根据要求,我建议后缀作为 MTA;它具有在接收消息时执行脚本的内置功能,并且易于配置对邮件接收和连接的限制。
当然,大多数系统管理员只会配置计划任务。