如何通过 crontab 计划在一行中删除数据库中的一张表?

如何通过 crontab 计划在一行中删除数据库中的一张表?

我正在尝试删除数据库中的整个表。我的目的很简单,希望通过计划的 crontab 命令偶尔执行此操作。

现在,我有这个示例 cronjob 尝试(如果您将计划更改为更接近的测试计划,则它将不起作用):

0 0 1 1 * mysql -u root -p <passwordWouldBeHere> -D Survival -h localhost -e 'DROP TABLE stats;'

这看起来正确吗?

但是,这不起作用。我唯一的怀疑是,这可能是由于密码的内容,其中包含一个 & 字符,我怀疑密码的一部分可能会被检测为命令中的附加单独参数,即使整个密码是无空格连接的。

我必须在我的主机上安装一个邮件服务器,以便每次执行此命令和 crontab 上安排的任何其他命令时获取返回参数(单数,但我猜这就是 crontab 的工作方式)。

不过,多亏了这一点,我现在可以从我作为示例显示的错误命令中获取返回错误消息:

/bin/sh: 1: <part of the password>: not found

该消息基本上告诉我未找到密码的一部分,好像该部分是额外的参数。我找不到任何手册来解释整个 mysql 命令语法,所以我不知道“&”是否真的可以代表新参数的开始,从而导致此错误。如果是这种情况,我是否可以在密码中插入一些特殊的排除字符,以避免将其检测为单独的参数?

我还没有尝试在常规 shell 上手动执行该命令。我可以这样做,但我更愿意直接在 crontab 中正确执行。我猜我会得到与错误类似的返回消息。

我正在使用 10.3.16-MariaDB 和 Ubuntu 18.04

我已尽力包含与此问题相关的所有信息,因此如果您发现缺少某些内容,请礼貌地指出,我会更正/添加内容。提前感谢您的帮助。

答案1

解决方案:将语法更改为:

30 22 7 8 * mysql --host localhost --user root --password="<passwordWouldBeHere>" -D Factions -e "TRUNCATE TABLE stats;" ;

还决定截断而不是删除。

相关内容