更新:脚本 A 已更新以反映 sshpass、scp、paxdiablo 和 Evert 的路径声明。因为这不能解决问题,所以我不相信这个问题是链接问题的重复。
我有一个 bash 脚本,我们称之为 A,它查找 15 分钟前创建的文件并将它们从服务器 1 移动到服务器 2。A 的代码是:
#!bin/bash
find /data/Output/*.txt -mmin +15 -exec /usr/local/bin/sshpass -p 'thepassword' /usr/bin/scp -c blowfish "{}" Server2:/data/Output \;
如果我从命令行运行代码,它会移动数据。但是,如果我创建了一个调用脚本的 crontab 文件,它就不会运行。
crontab 脚本内容如下:
0 * * * * R CMD BATCH /home/me/generate_data.txt
15 * * * * /bin/bash /home/me/move_data.sh > /dev/null 2>&1
要让 cron 调用脚本,我输入:
crontab /path/to/crontab/file.txt
crontab -l 显示作业正在运行。我也知道 cron 本身正在运行,因为 generate_data.txt 每小时都会下载数据。因此,问题似乎不是孤立的 cron 或 bash,而是它们一起工作的问题。
这个问题似乎很常见,但是这里、这里和这里的建议没有帮助。我努力了:
- 权限。两个文件的权限都是 755。
- 把它放在 /etc/cron.hourly/ 没有 .txt 结尾。
- 在文件末尾添加一个空行。
- 调用“bash”和“/bin/bash”。
- 重新启动 cron。
我使用 nano 编辑此脚本。服务器 A 是 Ubuntu 14.04 LTS,服务器 B 是 Amazon Linux AMI。两者都托管在 Amazon Web Services 上。
编辑:我应该补充一点,我在第三台服务器和服务器 B 之间运行了这个进程,它工作正常,即使用这些脚本将文件从服务器 C 发送到 B。服务器 C 是 Ubuntu 12.02 LTS,服务器 A 是 Ubuntu 14.04 LTS。
我错过了什么?