Найти и обновить запись cron с помощью сценария

В вашей службе systemd вы можете настроить запуск VPN после того, как соединение установлено. Решение - изменить директиву After в файле модуля. Например, служба sshd находится в этом файле /etc/systemd/system/multi-user.target.wants/sshd.service и параметр После принудительно выполняет службу для запуска после сети:

[Unit]
Description=OpenSSH Daemon
Wants=sshdgenkeys.service
After=network.target

[Service]
ExecStart=/usr/bin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

Таким образом, вы должны изменить После для службы VPN, например vpn.service

1
17.06.2017, 14:20
2 ответа

Использование файла или стандартного ввода для настройки crontab вновь создает (перезаписывает )содержимое, а не добавляет к тому, что уже может существовать.

Одним из простых решений было бы записать каждую из ваших записей в один файл:

crontab -u root -l | grep -w "$VAR" | crontab -u root - && \
    { crontab -l -u root 2>/dev/null; echo "0 */2 * * * /root/$VAR/script > /dev/null 2>&1"; } \
    >> cron-entry-file

Затем, когда вы соберете все записи, сделайте это только один раз:

crontab -u root cron-entry-file

Если вы создаете свои записи в разных сценариях и/или в разное время, то каждый раз вам нужно будет выполнять:crontab -l > cron-entry-fileдля сохранения текущих настроек, затем выполните шаги, описанные выше. (Будем надеяться, что кто-нибудь предложит более изящное решение, но этот -метод грубой силы должен сработать.)


Редактировать

Поскольку ваш сценарий не так прост, как я думал, когда изначально писал вышеизложенное, рассмотрите возможность манипулирования файлом crontab напрямую. Это обычный файл (в каталоге /var/cron/tabs/{username}, например ). Возможно, стоит сначала прочитать это:https://serverfault.com/questions/347318/is-it-bad-to-edit-cron-file-manually

1
27.01.2020, 23:45

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

echo "0 */2 * * * root /root/$VAR/script > /dev/null 2>&1" > /etc/cron.d/$VAR

Это создаст файл, названный в честь переменной в /etc/cron.d/, и будет следовать расписанию, определенному в самом файле. Чище, чем управление crontab, как рекомендуется в этой теме.

0
27.01.2020, 23:45

Теги

Похожие вопросы