CentOS
我想要两台服务器之间的双向数据同步,所以我Unison
在两台CentOS
服务器上都安装了它。我在 root 上创建了一个脚本文件,当我从终端运行它时,它可以运行 unison 并正常工作,并同步文件。当我将该脚本放入 crontab 中时,同步根本不起作用。我的/etc/crontab
是
*/1 * * * * root sh /root/syncaaa.sh &>/root/unison-cron.log
crontab 放入的内容/root/unison-cron.log
Usage: unison [options]
or unison root1 root2 [options]
or unison profilename [options]
For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".
我的 unison.log 文件在通过 cron 运行时不会更新,但只有通过终端直接运行时才会更新。我检查了 cron 日志,发现 syncaaa.sh 文件每分钟运行一次。有人能建议我该怎么做才能调试它吗?
注意:我的服务器 1 可以无需密码登录到服务器 2,因为我已在服务器 2 的 authorized_keys 中设置了 rsa 密钥。
> 更新 1:我尝试了一下set -x
脚本并打印了
+ chmod -R 0777 /home/user11/folder/
+ /usr/bin/unison
Usage: unison [options]
or unison root1 root2 [options]
or unison profilename [options]
For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics"
并且/usr/bin/unison
命令在终端上运行良好
答案1
我解决了这个问题,是HOME=/
在crontab中,应该是你.unison
存在的路径
所以我现在的 crontab 内容是
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/home/user1/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/1 * * * * user1 sh syncaaa.sh &>unison-cron.log
答案2
set -x
在脚本顶部添加,这样它会在运行每个命令之前打印出每个命令。
然后查阅日志文件以查看哪里出了问题。
您引用的 Unison 错误消息表示该unison
命令没有获得正确数量的参数。上述方法将显示实际运行的命令。