我有一个名为 /etc/cron.daily/99loganalyzer_expire 的脚本,它是这样的:
#!/bin/bash
SQL="DELETE FROM SystemEvents WHERE ReceivedAt < DATE_SUB(CURDATE(),INTERVAL 30 DAY)"
MYSQL_USER="loganalyzer"
MYSQL_PASS="loganalyzerpassword"
MYSQL_DB="Syslog"
echo $SQL | /usr/bin/mysql --user=$MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB
当它运行一整夜时,我收到一封电子邮件说它失败了:
/etc/cron.daily/99loganalyzer-expire:
ERROR 1045 (28000): Access denied for user 'loganalyzer'@'localhost' (using password: YES)
...但是,当我从控制台以 root 身份运行它时,它起作用了:
# time /etc/cron.daily/99loganalyzer-expire
real 1m16.391s
user 0m0.012s
sys 0m0.008s
我如何传递此 mysql 用户的凭据,以便他们在 cronjob 中工作?
像这样将登录凭据放入命令行是有风险的,因为任何可以查看进程列表的人都可以查看这些凭据。更好的选择是将这些凭据放入一个选项文件中,例如 ~/.my.cnf,然后在您的命令中引用该文件。
确保将该选项文件的权限更改为 0600,以防止除所有者之外的任何人都可以查看它。那么你的 mysql 命令将是:
有关选项文件的更多详细信息,请访问http://dev.mysql.com/doc/refman/5.6/en/option-files.html。
您需要使用不同的命令。
这样的事情应该有效:
可能需要根据您的需要进行调整,我不是 100% 确定如何选择数据库。
顺序错了,最后一行,管道之前的应该在行尾。
我的意思是,SQL 命令是最后一位。