自定义每日和每周 Cron 作业未运行

自定义每日和每周 Cron 作业未运行

我创建了一个脚本来备份我的数据库和网站。如果我直接运行它,它会运行良好,但它根本不像 cron 作业那样运行。

我创建了指向该脚本的符号链接:

lrwxrwxrwx 1 root root    44 Feb 11 14:58 backupsql -> /home/techguyalabama/dropboxbackup/backupsql

backupsites如果我从目录运行/etc/cron.daily,它会提示我输入密码。我不确定这是否是问题所在。如果是,我该如何避免这种情况?

我确实更改了 cron 作业的运行时间。也许这也是不行的?

这是在我的 crontab 中:

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
05 5    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
30 5    * * 6   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
00 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

我确实重新启动了服务器以查看是否有区别,但事实并非如此。

我还检查了系统日志,来自这篇文章cron / crontab 日志在哪里?,查看其中是否有关于 backupsql 的内容:

tail -f /var/log/syslog | grep backupsql

我没有得到任何结果。

有人看到我做错什么了吗?

编辑#1

这是我的备份sql脚本:

#!/bin/bash

DB_BACKUP="/home/techguyalabama/dropboxbackup/sqlbackup"
DB_USER="root"
DB_PASSWD="wouldntyouliketoknow"
HN=`hostname | awk -F. '{print $1}'`

# Create the backup directory
mkdir -p $DB_BACKUP

# Backup each database on the system
for db in $(mysql --user=$DB_USER --password=$DB_PASSWD -e 'show databases' -s --skip-column-names|grep -viE '(staging|performance_schema|information_schema)');
do mysqldump --user=$DB_USER --password=$DB_PASSWD --events --opt --single-transaction $db | gzip > "$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).gz";
done

/home/techguyalabama/dropboxbackup/dropbox_uploader.sh upload /home/techguyalabama/dropboxbackup/sqlbackup/*.* /sqlbackup/
rm -f /home/techguyalabama/dropboxbackup/sqlbackup/*.*

答案1

不要忘记这些 cron 脚本是以 root 身份运行的,这意味着例如主目录指的是 root 的主目录,等等。

由于您的脚本要求输入密码,您可能需要以 root 权限运行它,因此您不能只创建通常的 .anacron/cron.daily 并将脚本放入其中,您必须使用 /etc/cron.daily 以便它以正确的权限执行。

我认为最简单的解决方案是检查您的脚本是否使用用户特定的变量(如 $HOME),在这种情况下,您必须将其替换为用户“techguyalabama”的变量。

答案2

我刚刚关注了这个答案如何正确设置 root cron 任务

如果您想以普通用户身份运行脚本:

crontab -e

并添加以下行:

07,37 * * * * /usr/bin/tunlrupdate.sh

如果你想以 root 身份运行脚本:

sudo crontab -e

并添加相同的行:

07,37 * * * * /usr/bin/tunlrupdate.sh

作为用户,它立即起作用。

相关内容