我正在尝试创建一个每天备份我的MySQL奴隶的cron。 backup.sh内容:
#!/bin/bash
#
# Backup mysql from slave
#
#
sudo mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;'
sudo mysqldump -u root -p'xxxxx' ng_player | gzip > database_`date +\%Y-\%m-\%d`.sql.gz
sudo mysqladmin -u root -p'xxxxx' start-slave
我通过sudo chmod +x /home/dev/backup.sh
使其可执行
并通过以下方式输入crontab
sudo crontab -e
0 12 * * * /home/dev/backup.sh
但它不起作用,如果我只在命令行中运行它,但不在crontab
中。
FIXED: 我使用了此链接中的脚本:mysqldump doesn't work in crontab
答案 0 :(得分:1)
将问题分成两半。首先尝试只发送来自cron作业的电子邮件,看看你是否正在运行它。将上面的内容放在一个文件中,让你的cron作业指向它:
#!/bin/bash
/bin/mail -s "test subject" "yourname@yourdomain" < /dev/null
使用此测试仪的好处在于它非常简单,更有可能为您提供一些结果。它不依赖于您当前的工作目录,有时可能不符合您的预期。
答案 1 :(得分:0)
尝试使用.sh文件中的mysql bin目录的完整链接
示例:
sudo /var/lib/mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;'
答案 2 :(得分:0)
我遇到了同样的问题。
我发现你不能在非交互式脚本中使用命令sudo
。
sudo
命令会创建一个字段,您可以在其中键入帐户(root)的密码。
如果您登录ssh sudo工作的命令提示符而不输入任何密码,但当另一个程序运行sudo
时,它会要求输入密码。
试试这个而不是su
命令不需要任何登录,它也会做同样的事情。
su --session-command="mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;'" root
su --session-command="mysqldump -u root -p'xxxxx' ng_player | gzip > database_`date +\%Y-\%m-\%d`.sql.gz" root
su --session-command="mysqladmin -u root -p'xxxxx' start-slave" root
用你的linux用户名替换root。
修改强> 查看此主题以获得不同的答案。 https://askubuntu.com/questions/173924/how-to-run-cron-job-using-sudo-command
答案 3 :(得分:0)
让我们从剧本中的愚蠢内容开始。
你不通过'sudo'运行的唯一命令是,非常好的, only 命令,我希望你可能需要通过sudo运行(取决于目标文件的权限。)
如果以root用户身份调用脚本,则在没有命名用户的情况下使用sudo(即以root身份运行)在脚本中加载命令不起作用。
在典型安装中,mysql,mysqladmin和gzip程序通常可由任何用户执行 - DBMS使用作为参数传递的身份验证凭据对DBMS的命令进行身份验证和授权 - 因此我不希望这里的任何操作,除了可能写入输出文件(取决于其权限)。
您没有为备份文件指定路径 - 也许它正在将其写入您预期的其他位置?
(类似地,您应该检查是否有任何可执行文件位于crontab执行环境的$ PATH中的位置。)
但它不起作用
....不是错误消息。
通过cron运行的任何命令的输出都会邮寄给crontab的所有者 - 请阅读你的邮件。