Избегание нескольких заданий cron при входе в несколько терминалов - PullRequest
0 голосов
/ 02 декабря 2011

Я пытаюсь настроить cron в среде Unix , чтобы каждый час синхронизировать мой код и файлы конфигурации с папкой резервных копий.

Мне нужно, чтобы это происходило всякий раз, когда я захожу на свой рабочий терминал и с почасовой периодичностью.Итак, я вставил в свой файл .bashrc следующее:

0 * * * * rsync -avz ~/codes/ /cheap/code_bkp

Однако теперь, когда я вошел в несколько рабочих терминалов, каждый из них запускает работу независимо, и я получаю несколько электронных писем (по 1 на каждоетерминал) каждый час.

Я хотел бы убедиться, что только 1 терминал запускает задание cron.Пожалуйста, предложите какой-нибудь способ сделать это и избежать проблемы с несколькими терминалами.

1 Ответ

3 голосов
/ 02 декабря 2011

Я думаю, что вы хотите что-то вроде подсчета ссылок: если вы поместите это в .bashrc

( counter=$(cat ~/.login_count); echo $(( $counter + 1 )) > ~/.login_count )

и что-то подобное в .bash_logout

( counter=$(cat ~/.login_count); echo $(( $counter - 1 )) > ~/.login_count )

Тогда ~/.login_count будет содержать количество активных сеансов терминала, при условии, что вы всегда выходите из системы чисто.

Затем вы можете проверить, что это ненулевое значение в вашем cronjob, чтобы увидеть, вошел ли хотя бы один терминал в систему:

0 * * * * [ $(cat ~/tmp/counter) > 0 ] && do_backup

...