我有 3 个 cronjob 条目(crontab -l
),第一个条目是一个 Perl 脚本,用于创建虚拟机的 LVM 备份,另外两个只是执行mysqldump
.
嗯,但是,我crontab -e
以 root 身份进行编辑(sudo su
首先),这是我的第一个工作条目
# Run daily backup of my job at 3:15 [relation ä11]
15 3 * * * perl /opt/AUTO_BACKUP/virt-backup.pl --action=dump --date --vm=SERVER2
好吧,但它既没有在备份目录中创建任何输出,也没有在 cron 日志中创建任何条目。在 cron 日志文件中,我只找到了其他 sh 作业的条目。
但是当我将命令perl /opt/AUTO_BACKUP/virt-backup.pl --action=dump --date --vm=SERVER2
直接复制到 root 终端时,它运行起来非常顺畅。因此,由于我crontab
以 root 身份编辑,因此只有正确的用户才能运行该作业。并且日志中也没有错误。
答案1
将条目更改perl
为path/to/perl
。通常,诸如perl
和 之类的命令python
实际上是基于环境的,可以在 PATH 中找到。由于 cron 缺少该 PATH,因此最好在 crontab 中使用绝对路径。
答案2
脚本从 shell 执行而不是作为 cronjob 执行时运行的原因通常是它在那里找到了不同的环境。
因此,使用以下命令更改你的 cronjob 以将环境保存在 /tmp/env 中
env | sort> /tmp/env
当 /tmp/env 到达时,它会与您当前的环境产生差异。
env | sort | diff - /tmp/env
高血压