我设置了几个cron
工作来维护远程数据库的本地副本。
第一个从远程计算机下载最新版本的数据库,该计算机每天运行并且工作正常。
第二个导入下载的数据,但它不起作用。
这项工作只是一个简单的 shell 脚本:
#!/bin/bash
mysql -u root -mypass -h localhost my_db < my_db.sql
cron 任务的设置如下:
0 8 * * * bash /home/lampadmin/cron/my_db.sh
如果我手动运行 shell 脚本,它工作正常。
我该怎么做才能通过 cron 找出它不工作的原因?
答案1
删除 bash,只需执行以下操作即可:
0 8 * * * /home/lampadmin/cron/my_db.sh
还要检查 my_db.sh 是否可执行。
chmod a+x /home/lampadmin/cron/my_db.sh
答案2
我对于让该文件对所有人都可执行有一种不好的预感。我会尝试这个接近你的第一个想法。
0 8 * * * /bin/bash /home/lampadmin/cron/my_db.sh
使用完整路径运行命令始终是一个好主意。否则你永远不知道你会得到什么。因此,您还应该提供my_db.sql
文件中的完整路径my_db.sh
。
但除此之外,我对通过命令行设置密码有更糟糕的感觉。ps
当脚本运行时,每个用户都可以看到 root 密码。
.my.cnf
我建议通过这样的文件设置密码
[mysql]
user=root
password=rootpassword
在相应用户的主目录中。如果此方法对于您的要求来说太笼统,您可以将其放入额外的文件中/home/lampadmin/cron/my.cnf
并使用此设置
/usr/bin/mysql --defaults-extra-file=/home/lampadin/cron/my.cnf -h localhost mydb < /pathto/my_db.sql
在任何情况下,只有用户才能访问您的my.cnf
密码,以保护您的密码。你应该使用
chmod go-rwx my.cnf
为了达成这个。