Назад | Перейти на главную страницу

Почему unison не запускается в crontab?

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

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

Я решил проблему, и это был 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 команда не получила нужное количество аргументов. Вышеупомянутый подход покажет вам, какая команда действительно была запущена.