有这样一个用于创建 mysql 备份的 bash 脚本:
#!/bin/bash
cd /var/www/html/backup/sql-backup
rm site-3.sql
mv site-2.sql site-3.sql
mv site-1.sql site-2.sql
/bin/mv site-0.sql site-1.sql
mysqldump -u USER -p PASSWORD DBNAME > /var/www/html/backup/sql-backup/site-0.sql
我在特定时间由 Debian 上的 crontab 运行:
00 11 * * * root sh /root/mysql-backup.sh
该脚本会在其中创建一个新文件,/var/www/html/backup/sql-backup/site-0.sql
但会忽略命令rm
和mv
. 然后创建一个具有相同名称的文件,但它不工作。但是当您从控制台运行脚本时,一切正常。
一般来说,一个拐杖,但问题是通过使用检查解决的。
0)我在邮件中发现了一个错误:
/root/mysql-backup.sh: line 6: cd: $'../var/www/html/backup/sql-backup\r': No such file or directory
,我首先被符号弄糊涂了$
。原来是 Windows 上的编辑器的诡计。dos2unix
通过实用程序转换为 Unix 格式1) 添加
pwd
到脚本的开头,以了解脚本的启动位置。2)添加到
crontab
行尾# > /tmp/pwd.log 2>&1
。检查了文件/tmp/pwd.log
。结果证明是从 /root 启动的,这是合乎逻辑的,因为它在crontab
.3)在
pwd
切换到文件夹后添加以检查它是否有效cd
。它有效,它被写在日志中:/
.4) 将转换更改为返回根目录 (
..
) 的文件夹:cd ../var/www/html/backup/sql-backup
一切正常。为什么它不起作用,我只是
cd /var/www/html/backup/sql-backup
不明白。毕竟,绝对路径是/
在开头指定的。全部的: