Shell 脚本手动运行,但不通过 cron 运行

Shell 脚本手动运行,但不通过 cron 运行

在我的 sudo crontab 中,用 编辑sudo crontab -e,我有:

# m h  dom mon dow   command
40 4 * * * /bin/bash /usr/bin/verify-miab-backup.sh

该脚本是:

#!/bin/bash
echo `date` > /home/mythbuntu/last_verify_miab_run.log
echo `id -u -n` >> /home/mythbuntu/last_verify_miab_run.log
export PASSPHRASE=$(cat /dozer/eandb/miab_22-04/secret_key.txt)
duplicity verify --log-file=/var/log/duplicity_backblaze_verify.log file:///dozer/eandb/miab_backblaze_backups/ /dev/null && echo "miab_last_verify_time_seconds `date +"%s"`" > /etc/grafana-text-file-collectors/miab_verify.prom

前两行是为了帮助尝试调试此问题。该/home/mythbuntu/last_verify_miab_run.log文件包含:

Mon 10 Apr 04:40:01 BST 2023
root

因此看起来该文件正在由 root 运行。第三行从文件中获取密钥并将其存储到 PASSPHRASE 中(在 cron 作业中这样做可以吗?),然后第四行使用该密码来验证备份。

但是,如果我查看 .prom 文件:

$ cat /etc/grafana-text-file-collectors/miab_verify.prom
miab_last_verify_time_seconds 1681077406

该时间对应的是 2023 年 4 月 9 日星期日 22:56:46,这是我上次手动运行的时间。

使用 手动运行它sudo verify-miab-backup.sh,一切都按预期工作。/home/mythbuntu/last_verify_miab_run.log包含:

$ cat /home/mythbuntu/last_verify_miab_run.log 
Mon 10 Apr 14:10:15 BST 2023
root

cat /etc/grafana-text-file-collectors/miab_verify.prom
miab_last_verify_time_seconds 1681132381

正如您所料,是 2023 年 4 月 10 日星期一 14:13:01。

我猜我明显在权限方面犯了错误,或者以 cron 作业中不允许的方式使用了变量,但我不知道在哪里。任何帮助都将不胜感激。

查看此处的先前问题:

非常感谢!

答案1

我只需输入以下内容定时任务

# m h  dom mon dow   command
40 4 * * * /usr/bin/verify-miab-backup.sh

并将改变脚本的内容如下:

#!/bin/bash
{
  echo -e "\n=== $(date) - $0 started - $(id -u -n) ==="
  export PASSPHRASE=$(cat /dozer/eandb/miab_22-04/secret_key.txt)
  duplicity verify ...
  echo -e "\n=== $(date) - $0 finished ==="
} &>> /home/mythbuntu/last_verify_miab_run.log

这边走,全部预期和非预期输出(标准输出) 和错误消息(标准错误) 将附加到日志文件的末尾 ( /home/mythbuntu/last_verify_miab_run.log),这样您就可以更轻松地调试脚本。您应该将任何其他命令放在花括号 ( {}) 内,这样您就不会丢失任何内容。

我还将确定duplicity命令的完整路径(可能/usr/bin/duplicity),并使用上面第 5 行中的完整路径,以防运行我的进程计划任务脚本没有包含duplicity其中包含的目录PATH,并且我在上面的日志中看到相关的错误消息。

相关内容