为什么 unison 不能在 cronjob 中运行?

为什么 unison 不能在 cronjob 中运行?

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命令没有获得正确数量的参数。上述方法将显示实际运行的命令。

相关内容