/etc/cron.d 没有运行作业

/etc/cron.d 没有运行作业

我需要以用户身份运行脚本来每晚备份我的数据库。我通过 ansible 在 /etc/cron.d/backup-mysql 中添加了以下 cron 作业。

0 3 * * * backup_mysql /path/backup-mysql.sh

我可以在 syslog 中看到正在运行的作业:

Apr 29 03:00:01 myserver CRON[1534185]: (backup_mysql) CMD (/path/backup-mysql.sh)

但是它什么也没做,我不明白为什么。我检查了路径,以用户身份运行了脚本。除了使用这个 cron 作业时,一切都正常。

我发现的解决方法是用以下方法替换该工作:

0 3 * * * root sudo -u backup_mysql /path/backup-mysql.sh

有效。

---------------------- 编辑 1 --------------------------

根据评论中@Gerald Schneider 的建议,我检查了昨天在测试期间 cron 发送的电子邮件:

From [email protected]  Tue May  2 15:25:01 2023
Return-Path: <[email protected]>
Received: from myserver.com (localhost [127.0.0.1])
        by myserver.com 
        for <[email protected]>; Tue, 2 May 2023 15:25:01 GMT
Received: (from backup_mysql@localhost)
        by myserver.com 
        for backup_mysql; Tue, 2 May 2023 15:25:01 GMT
Date: Tue, 2 May 2023 15:25:01 GMT
Message-Id: <[email protected]>
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <backup_mysql@myserver> /path/backup-mysql.sh
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/backup_mysql>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=backup_mysql>

backup-mysql.sh: Script can only be run as the "backup_mysql" user

该脚本似乎由不同于 backup_mysql 的用户运行。但是,我指定该作业以此用户身份运行,所以我不知道为什么它不起作用。

以下是检查用户的脚本部分:

backup_owner="backup_mysql"
sanity_check () {
    # Check user running the script
    if [ "$USER" != "$backup_owner" ]; then
        error "Script can only be run as the \"$backup_owner\" user"
    fi
    
    ...
}

答案1

正如@Prem的评论所建议的那样,$USER从cron.d运行时,我的脚本中未定义该变量。我更改了脚本以$USERwhoami命令中提取变量,现在它可以正常工作了。

相关内容