我的网站通过以下方式控制控制面板。我想自动备份我的数据库,然后自动将其下载到我的开发机器上。第一步是设置cron 作业如下
0 3 * * 4 mysqldump -u username -p password database1 > backup/db_biz_directory.sql
0 4 * * 4 mysqldump -u username -p password database2 > backup/db_swr_software.sql
- 备份文件夹中有两个空文件,时间戳为11日,即上周四。
- cPanel 的错误部分没有错误。
- 下面什么也没有ETC,日志或者变量文件夹。
- 我没有收到任何电子邮件,它们已设置完毕并开始工作。
- 这些数据库中有表和数据。
由于文件存在,作业显然已运行。我的作业出了什么问题?错误会记录在其他地方吗?
答案1
您可能没有提供足够的信息让我们确定。您可能想告诉我们这是在哪个 cron 文件中(即系统 cron -/etc/crontab
例如,有一个带有用户名的额外字段 - 虽然我怀疑这不是问题所在。cron 也有不同的实现 - 知道您使用的是哪个以及哪个操作系统会很有用)
我要做的第一件事就是添加一条路径 - 即更改mysqldump
为/usr/bin/mysqldump
假设这是系统的正确路径。
不清楚为什么你会期望从这个命令收到电子邮件。你在 crontab 中是否有一个包含类似行的更高命令[email protected]
?即使有这个,如果 mysqldump 命令没有产生任何输出,它也不会向你发送电子邮件。
您可能想尝试将其放入批处理文件中,然后调用它以及一些 echo 语句。此外,将 stderr 重定向到 stdout 也很有用(即添加2>&1
到批处理文件中命令的末尾)。
您说 etc 日志或 var 文件夹下没有任何内容 - 但是您是否在系统日志(例如)中查找过/var/log/messages
来自/var/log/syslog
crontab 的输出?
另外,我想说,从安全角度来看,在命令行上硬编码密码是个坏主意。你应该从命令行中删除用户名和密码,并将其添加到 .my.cnf 中 - 请参阅https://serverfault.com/questions/358903/store-the-mysql-client-password-or-setup-password-less-authentication
答案2
事实证明存在许多问题。
- davidgo 的答案解决了一个问题,即在运行 cron 时不存在正常路径信息。因此我需要输入完整路径对于 mysqldump。
- mysqldump 不喜欢空间-p 和密码之间
- 需要 mysqldump表锁访问,我还没有将其提供给用户。
- 正如 davidgo 的回答中提到的那样,错误本身并不会消失(与网络上的许多帖子相反)。
- 控制面板帮助说我应该收到一封电子邮件——这显然是不正确的。
我必须等到工作完成,现在一切都很好。
新的命令是
0 3 * * 4 /usr/bin/mysqldump -u username -ppassword database1 > backup/db_biz_directory.sql
我已经完成了备份多个数据库并通过电子邮件将状态/错误发送给我的脚本。