Indermove
@Indermove
C#/.NET back-end разработчик

Почему не запускается cron скрипт?

Помогите неопытному. Операционная система CentOS 6.3. Пытаюсь настроить бэкап папки и базы данных через rsync. Скрипты через консоль запускаются нормально, все работает, крон ошибок при сохранении не выдает, просто пишет "installing new crontab". Если я все правильно понимаю, то вроде все правильно. Но почему-то ничего не работает. Права на папку где лежат скрипты 777.

Сами скрипты:
Первый
#!/bin/bash

cd /mnt/backup/neon_backup/MySQL_backup
mysqldump -u root -pnppwd --all-databases > mysql_backup.sql
tar cvjf back_mysql.tar.bz2 mysql_backup.sql


Второй
#!/bin/bash
sudo rsync --archive /home/share --delete /mnt/backup/neon_backup
sudo rsync --archive /var/www/html/vtgr --delete /mnt/backup/neon_backup


Третий
#!/bin/bash
sudo rsync --archive /var/www/html/vtgr --delete /mnt/backup/neon_backup/vtgr_weekly
cd /mnt/backup/neon_backup/vtgr_weekly/MySQL_weekly
mysqldump -u root -pnppwd --all-databases > mysql_backup.sql
tar cvjf back_mysql.tar.bz2 mysql_backup.sql


Текст crontab
0 1 * * * /bin/bash /usr/share/script.sh
0 2 * * * /bin/bash /usr/share/script2.sh
* * * * 1 /bin/bash /usr/share/script3.sh
30 4 * * * /var/www/vtgr/script/updateControlWorker.php
30 4 * * * /var/www/vtgr/script/createTack.php


Я уже по всякому попробовал и /bin/bash в crontab убирал, поскольку как я прочитал, если в начале скрипта стоит #!/bin/bash , то это не нужно.
  • Вопрос задан
  • 56987 просмотров
Решения вопроса 1
Indermove
@Indermove Автор вопроса
C#/.NET back-end разработчик
Все нашел ответ на свой вопрос:

1) Кронтаб нужно запускать так: sudo crontab -e - это нужно чтобы cron запускал скрипты из под root.
2) Инструкции для cron должны быть такими. Нужно обязательно писать bash перед указанием пути к скрипту. После указания пути к скрипту дописать >/dev/null 2>&1
Пример:
0 1 * * * bash /bin/bash /usr/share/script.sh >/dev/null 2>&1
0 2 * * * bash /bin/bash /usr/share/script2.sh >/dev/null 2>&1
* * * * 1 bash /bin/bash /usr/share/script3.sh >/dev/null 2>&1

#!/bin/bash
rsync --archive /home/share --delete /mnt/backup/neon_backup
rsync --archive /var/www/html/vtgr --delete /mnt/backup/neon_backup

3) Сами скрипты действительно должны быть лишены sudo, так как и так запускаются из под пользователя root.
Пример:
#!/bin/bash

cd /mnt/backup/neon_backup/MySQL_backup
mysqldump -u root -pnppwd --all-databases > mysql_backup.sql
set > /tmp/script-environment
tar cvjf back_mysql.tar.bz2 mysql_backup.sql
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
IlyaEvseev
@IlyaEvseev
Opensource geek
В crontab в конец каждой команды добавьте:
> /tmp/имя_команды.log 2>&1
и почитайте /tmp/*.log
Ответ написан
Комментировать
egor_nullptr
@egor_nullptr Куратор тега Linux
Всё дело в sudo, не используйте его в скриптах если не настроено выполнение без ввода пароля. Если требуется выполнение от root-а, то перенесите задачи крона в root-ый крон.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
1. /bin/bash в crontab не нужен. Выкиньте его и сделайте скрипты исполняемыми.
2. приложения из cron запускаются с минимальным environment, если mysqldump не лежит в /bin или /usr/bin, script.sh его не найдёт. Добавьте в скрипт set > /tmp/script-environment чтобы посмотреть, с чем они запускаются.
3. sudo -- нужен nopasswd
Ответ написан
Anonym
@Anonym
Программирую немного )
1. Избавьтесь от sudo. Выполняйте крон от того пользователя у которого есть права без sudo.
2. Посмотрите логи крона.
Ответ написан
Indermove
@Indermove Автор вопроса
C#/.NET back-end разработчик
Мне бы на самом деле помог бы пример правильного оформления заданий, просто я уже все перепробовал, а проконсультироваться просто не у кого. Очень помогло бы если бы кто-нибудь просто написал первый скрипт правильно, и как загнать его в крон.
Ответ написан
Комментировать
Snowdimon
@Snowdimon
Linux user
0 1 * * * root /usr/share/script.sh

Из скриптов убрать sudo.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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