我有一个每天在客户的 Ubuntu 20.04 服务器上运行的 bash 脚本。这个简单的脚本rsync
将一堆文件从一个位置复制到另一个位置。复制时,它会创建一个日志文件,其中包含基本信息:开始时间、结束时间、复制的文件数。备份结束后,它会ssmtp
将该报告发送到我的电子邮件。脚本如下所示:
#!/bin/bash
DAN=monday
rm -R /backup/$DAN/*
touch /backup/$DAN/backup.log
DATE=`date +%d.%m.%Y.`
TIME=`date +%R`
echo Subject: Backup report for date $DATE >> /backup/$DAN/backup.log
echo Content-Type: text/html; charset="utf8" >> /backup/$DAN/backup.log
echo
echo >> /backup/$DAN/backup.log
echo "Backup for date $DATE" >> /backup/$DAN/backup.log
echo >> /backup/$DAN/backup.log
echo "Starting daily at 22.00h" >> /backup/$DAN/backup.log
echo >> /backup/$DAN/bekap.log
echo "Starting time is $TIME" >> /backup/$DAN/backup.log
rsync -avh --progress -h /mnt/share/ /backup/$DAN
SIZE=`du -sh /backup/$DAN/`
FILES=`tree -f /backup/$DAN/ | wc -l`
KILLTIME=`date +%R`
echo >> /backup/$DAN/backup.log
echo "Ending time is $KILLTIME" >> /backup/$DAN/backup.log
echo >> /backup/$DAN/backup.log
echo
echo "Total copied size is $SIZE" >> /backup/$DAN/backup.log
echo >> /backup/$DAN/backup.log
echo
echo "Copied $FILES files" >> /backup/$DAN/backup.log
echo >> /backup/$DAN/backup.log
ssmtp -v -F "Backup report" [email protected] < /backup/$DAN/backup.log
现在,如果我手动运行脚本,使用 登录sudo
,它会正常工作,我会按预期收到报告。但是如果我crontab
执行相同的脚本,它会替换发件人和收件人,并且邮件不会送达!
手动执行的脚本创建如下日志条目:
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: Set MailHub="smtp.gmail.com"
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: via SMTP Port Number="465"
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: Creating SSL connection to host
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: 220 smtp.gmail.com ESMTP
cz16-20020a0564021cb000b00535204ffdb4sm2275216edb.72 - gsmtp
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: EHLO host.domain.com
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: 250 SMTPUTF8
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: AUTH LOGIN
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: 334 VXNlcm5hbWU6
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: b2JhdmVzdGVuamFAa29udHJvbHNpc3RlbS5ycw==
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: 334 UGFzc3dvcmQ6
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: ZGZ3dW1veHdvbGZ0c3B1eA==
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: 235 2.7.0 Accepted
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: MAIL FROM:<[email protected]>
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: 250 2.1.0 OK
cz16-20020a0564021cb000b00535204ffdb4sm2275216edb.72 - gsmtp
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: RCPT TO:<[email protected]>
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: 250 2.1.5 OK cz16-20020a0564021cb000b00535204ffdb4sm2275216edb.72 - gsmtp
Oct 18 08:49:47 BKP-ASUS sSMTP[265073]: DATA
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: 354 Go ahead cz16-20020a0564021cb000b00535204ffdb4sm2275216edb.72 - gsmtp
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Received: by host.domain.com (sSMTP sendmail emulation); Wed, 18 Oct 2023 08:49:47 +0200
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: From: "Backup report" <[email protected]>
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Date: Wed, 18 Oct 2023 08:49:47 +0200
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Subject: Backup report for date 18.10.2023.
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]:
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Date 18.10.2023.
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]:
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Starting daily at 22.00h
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]:
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Starting time is 08:43
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]:
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Ending time is je 08:49
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]:
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Total copied size is 736M#011/backup/test/
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]:
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]: Copied 412 files
Oct 18 08:49:48 BKP-ASUS sSMTP[265073]:
Oct 18 08:49:49 BKP-ASUS sSMTP[265073]: .
Oct 18 08:49:49 BKP-ASUS sSMTP[265073]: 250 2.0.0 OK 1697611789 cz16-20020a0564021cb000b00535204ffdb4sm2275216edb.72 - gsmtp
Oct 18 08:49:49 BKP-ASUS sSMTP[265073]: QUIT
Oct 18 08:49:49 BKP-ASUS sSMTP[265073]: 221 2.0.0 closing connection
cz16-20020a0564021cb000b00535204ffdb4sm2275216edb.72 - gsmtp
Oct 18 08:49:49 BKP-ASUS sSMTP[265073]: Sent mail for [email protected] (221 2.0.0 closing connection cz16-20020a0564021cb000b00535204ffdb4sm2275216edb.72 - gsmtp) uid=0 username=r>
但是如果我cron
执行脚本,这就是我在日志中发现的内容:(我希望缩短为重要部分):
Oct 18 04:15:26 BKP-ASUS sSMTP[264166]: 235 2.7.0 Accepted
Oct 18 04:15:26 BKP-ASUS sSMTP[264166]: MAIL FROM:<[email protected]>
Oct 18 04:15:26 BKP-ASUS sSMTP[264166]: 250 2.1.0 OK g5-20020a1709067c4500b009ad8084e08asm690857ejp.0 - gsmtp
Oct 18 04:15:26 BKP-ASUS sSMTP[264166]: RCPT TO:<[email protected]>
Oct 18 04:15:26 BKP-ASUS sSMTP[264166]: 250 2.1.5 OK g5-20020a1709067c4500b009ad8084e08asm690857ejp.0 - gsmtp
Oct 18 04:15:26 BKP-ASUS sSMTP[264166]: DATA
知道为什么它的行为不同吗cron
?
答案1
最后,事情并不是看上去的那样……这不是 sSMTP 问题,而是 bash 问题。我将“#!/bin/bash”替换为“#!/usr/bin/env bash”,并添加了另一行 PATH,现在它可以正常工作了!感谢所有发送想法寻求帮助的人。