Почему унисон не работает в cronjob?

Я хочу двустороннюю синхронизацию данных между двумя CentOS на основе серверов, поэтому я установил Unison на обоих моих CentOS сервера. Я создал файл сценария root, который работает в унисон и работает нормально, и синхронизирует файлы, когда запускаю его из терминала. Когда я помещаю этот скрипт в 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 запускается каждый miunte. Может кто-нибудь предложить мне, что я должен сделать, чтобы отладить его?

Примечание: мой сервер 1 может войти на сервер 2 без пароля, так как я установил ключи rsa в server2 авторизованные_ключи.

> Обновление 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 команда отлично работает на терминале

2 ответа

Я решил проблему, и это было 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

Добавлять set -x в верхней части скрипта, поэтому он будет распечатывать каждую команду, прежде чем запустить ее.
Затем обратитесь к файлу журнала, чтобы увидеть, что пошло не так.

Сообщение об ошибке, которое вы цитировали от Unison, означает, что unison Команда не получила правильное количество аргументов. Приведенный выше подход покажет вам, какая команда действительно запущена.

Другие вопросы по тегам