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

Настройка задания cron, которое выполняет chmod / chown

Я хотел бы настроить задание cron, которое повторно выполняет chmod / chown в каталоге (каталог dropbox).

Это работает, когда я выполняю команды вручную, например:

sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox

Я попытался преобразовать его в такую ​​работу cron:

10      *       *       *       *       sudo chown -R $USER ~/Dropbox

Но, похоже, это не работает.

Как это сделать?

sudo должен почти никогда использоваться в запланированных задачах. Он ожидает, что сможет разговаривать с терминалом, и требует определенных флагов, чтобы не пытаться это сделать.

Создайте задание cron как root (в /etc/crontab - Обратите внимание, что формат этого файла немного отличается: minute hour mday month wdayusercommand) вместо этого.
Это также имеет преимущество при работе с системами, в которых sudo не установлен.

Вам нужен корневой скрипт cron (отредактируйте, запустив sudo crontab -e) быть:

 55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox

Предполагая, что пользователь назван somename и это /home/somename/Dropbox - это полный путь к вашему каталогу Dropbox. Как пользователь root ~ переходит в /root.

Две проблемы:

1) Пути обычно не настраиваются в cron так, как при входе в систему. Попробуйте / usr / bin / sudo / bin / chown ... (или любые другие правильные пути к этим программам в вашей системе).

2) sudo обычно запрашивает ваш пароль, иначе он может не работать без взаимодействия. Я предлагаю вам поместить команды в crontab root без sudo, тогда команды будут выполняться от имени root.

С вашим crontab есть несколько проблем:

10 * * * sudo chown -R $USER ~/Dropbox

Проблемы:

  • sudo здесь не следует использовать; требуется ввод терминала
  • chown должны быть полностью указаны (т. е. /bin/chown)
  • USER поскольку фактическая переменная может не существовать; некоторые системы используют LOGNAME
  • ~ (тильда) распознается только оболочкой - голым chown не пойму
  • указание HOME в корневом crontab переходит в корневой каталог

Думаю, я бы на самом деле написал сценарий:

#!/bin/bash

# FILE: /usr/local/bin/myscript

USER=$1
eval chown -R $1 ~$1/Dropbox
eval chmod -R u+rw ~$1/Dropbox

(The eval необходимо преобразовать ~$1 к ~user затем к /home/user.)

Запустите этот сценарий из crontab root:

# root's crontab
10 * * * /usr/local/bin/myscript someuser

В качестве альтернативы вы можете включить поддержку ACL и используйте setfacl для достижения того же / подобного результата.