Рейтинг:1

Почему мой crontab -e не выполняет скрипт .sh?

флаг cn

В судо кронтаб -е У меня есть это:

*/2 * * * * дата >> /home/rki/test.log
*/5 * * * * sudo sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh

*/2 * * * * дата >> /home/rki/test.log работает без проблем, пишет каждые 2 минуты в test.log файл.

Он просто не будет выполнять резервная копия.ш скрипт, который имеет это:

#!/бин/баш
# Удалить предыдущие резервные копии
#sudo rm dokuwiki-backup*.tar.gz

# Установить имя резервной копии
name=dokuwiki-backup_$(дата '+%Y-%m-%d-%H%M%S')

# Резервное копирование
/bin/tar -zcvf "$name.tar.gz" /var/lib/docker/volumes/dokuwiki_data

я могу сделать судо ш dokuwiki_backup.sh нормально без проблем. Баш-скрипт chmodред. 0777 и чаун рки: рки.

Что я делаю не так?

sudodus avatar
флаг jp
Задачи, требующие повышенных разрешений, должны быть загружены в cron с помощью `sudo crontab -e` и не должны содержать sudo, поэтому попробуйте использовать `*/5 * * * * /bin/sh /home/rki/docker-compose-stuff/dokuwiki. /backups/dokuwiki_backup.sh`
флаг cn
1. Не помещайте sudo в crontab 2. Используйте абсолютные пути.
Grumpy ol' Bear avatar
флаг cn
Это `/home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh ` не абсолютный путь?
флаг cn
и никогда не делайте `chmod 0777`. никогда не используйте 3-й 7. 0700 или 0750 для скриптов - лучшая безопасность, когда вы знаете пользователя, который их выполняет. @Grumpyol'Bear есть, но у `sh` его нет. Лучше всегда использовать пути, даже если путь находится внутри пути по умолчанию для cron. Мы не знаем, какой путь вашей системы находится внутри cron;)
Grumpy ol' Bear avatar
флаг cn
Я только что протестировал `*/5 * * * * /bin/sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh` без кубиков. `*/2 * * * * date >> /home/rki/test.log` все еще работает, по-прежнему нет резервной копии.
sudodus avatar
флаг jp
@Grumpyol'Bear, 1. Возможно, даже потребуется указать абсолютные пути внутри сценария оболочки. Причина в том, что среда, используемая `cron`, может быть очень простой (вы не можете ожидать, что она будет такой же, как у вошедшего в систему пользователя); 2. Использовали ли вы `sudo crontab -e`?
Grumpy ol' Bear avatar
флаг cn
Да, всегда `sudo crontab -e`, я хочу, чтобы это было как root, а не rki. В противном случае я бы использовал `crontab -e` для rki cronjobs.
sudodus avatar
флаг jp
1. Я предлагаю вам указать полный путь и к вызову `date`; 2. Несовместимо вызывать скрипт с `/bin/sh` и в то же время иметь шебанг `#!/bin/bash` в первой строке. Либо позвоните с помощью программы оболочки, либо используйте shebang. В последнем случае скрипт также должен быть исполняемым.
Grumpy ol' Bear avatar
флаг cn
К черту все это, я просто сделаю это вручную.хрень не работает...
pLumo avatar
флаг in
Может быть, он прекрасно работает, но ваш `$name.tar.gz` является относительным, и вы не знаете, где он находится?
Grumpy ol' Bear avatar
флаг cn
Ах, дерьмо... @pLumo, это действительно было так. Все в ./root/ . К черту саке...
sudodus avatar
флаг jp
Хороший улов @pLumo :-)
Рейтинг:1
флаг in

Если вы добавите свой cronjob через судо кронтаб -е, он будет работать как корень.

  • Нет необходимости в судо, использовать:

    */5 * * * * /bin/sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh
    
  • Рабочий каталог по умолчанию должен быть кореньс $ГЛАВНАЯ, так обычно /корень. Ты можешь найти $имя.tar.gz там. Но лучше использовать абсолютные пути, например:

    /bin/tar -zcvf "/home/rki/Резервные копии/$name.tar.gz" /var/lib/docker/volumes/dokuwiki_data
    
Рейтинг:-1
флаг cn

Для запуска cronjobs с полной корневой средой используйте эту команду

*/5 * * * * su - root -c '/home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh'
Grumpy ol' Bear avatar
флаг cn
Нет игральных костей. Не работает.
Thomas Aichinger avatar
флаг cn
В вашем скрипте может быть ошибка. Попробуйте запустить из командной строки.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.