我需要将 192.168.1.11 服务器上的一个文件 test.sql ,使用 scp 命令传送至 192.168.1.12 服务器。于是我编写了如下一个sh脚本:
#!/bin/bash
sshpass -p 'password' scp test.sql user2@192.168.1.12:/home/user2/mysql_backup_192.168.1.12/
并添加一个ubuntu定时任务:
# 每五分钟执行一次传送脚本
*/5 * * * * user1 sh /home/user1/mysqlbackup/testgo.sh
定时任务没有问题,每五分钟都会执行一次脚本,但是目标服务器中并没有出现我想要的文件。我开始怀疑是不是脚本出了问题,但是在脚本所在目录执行脚本是没问题的。
最后我发现定时任务执行脚本时的目录为用户的家目录:/home/user1/,但是 test.sql 文件位于:/home/user/mysqlbackup/,当在用户家目录中执行脚本时,由于用户家目录没有 test.sql 文件导致没有达成最终的效果。
解决方案为:在 sh 脚本中使用绝对路径,也就是如下脚本:
#!/bin/bash
sshpass -p 'password' scp /home/user1/mysqlbackup/test.sql user2@192.168.1.12:/home/user2/mysql_backup_192.168.1.12/
写成这样定时任务就会正常触发。
最终小计:在bash脚本中最好使用绝对路径,如果使用绝对路径不方便,在使用脚本前需要使用cd命令进入到脚本所在的目录。