LINUX.ORG.RU
ФорумAdmin

Подскажите, почему не отрабатывает скрипт в crontab

 


0

1

Добрый день. Есть один скрипт recycle_clean.sh, он запускается вручную успешно и отрабатывает, но вот в /etc/crontab есть такая запись:

59 23   * * *   root    /root/scripts/recycle_clean.sh

И из него почему-то не отрабатывает этот скрипт. Cron вроде запущен, по /etc/init.d/cron status выдает:

root@Server-T:/etc# /etc/init.d/cron status
Checking periodic command scheduler...done (running).

Стало быть крон запущен. Подскажите, почему не отрабатывает?

Выложи содержимое скрипта и syslog в момент запуска кроном.

afanasiy ★★★★ ()
Ответ на: комментарий от zolden
root@Server-T:/etc# ls -l /root/scripts/recycle_clean.sh
-rwxr--r-- 1 root root 319 Дек  5  2011 /root/scripts/recycle_clean.sh
root@Server-T:/etc# head /root/scripts/recycle_clean.sh
#!/bin/bash
mv /var/share/data_drive/Disk_S/.recycled/current /var/share/data_drive/Disk_S/.recycled/$(date -I)
mkdir /var/share/data_drive/Disk_S/.recycled/current
chmod 731 /var/share/data_drive/Disk_S/.recycled/current
chown root:"пользователи домена" /var/share/data_drive/Disk_S/.recycled/current
Shkapinsky ()
Ответ на: комментарий от emulek

Это группа, в ней доменные пользователи. А так, как вы предложили (* * * * *), он же не будет отрабатывать раз в сутки, или будет?

Shkapinsky ()
Ответ на: комментарий от Shkapinsky

Это группа, в ней доменные пользователи. А так, как вы предложили (* * * * *), он же не будет отрабатывать раз в сутки, или будет?

он будет отрабатывать 1440 раз в сутки. Каждую минуту. Ускоряет поиск ошибки в 1440 раз.

Да, таких групп не бывает в Linux'е.

У меня нет такого лога даже: /var/log/crond.log

будет.

emulek ()
Ответ на: комментарий от zolden

старообрядцы в треде

а что, починили, да? Я не в курсе, vim подставляет самостоятельно. Но может ТС notepad.exe юзает?

emulek ()
Ответ на: комментарий от emulek

Честно говоря, вообще никогда не встречал этой проблемы в реальности, и всегда думал что crontab -e сам всё валидирует и делает, хоть добавляй, хоть не добавляй
Я по мотивам какого-то треда пару лет назад тестировал это и всё работало при любом варианте

zolden ★★★★★ ()
Ответ на: комментарий от emulek

А чтобы раз в сутки нужно оставить как было:

59 23   * * *
?

Так как там достаточно много данных перемещает скрипт, каждую минуту не успеет.

Shkapinsky ()
Ответ на: комментарий от zolden

Честно говоря, вообще никогда не встречал этой проблемы в реальности, и всегда думал что crontab -e сам всё валидирует и делает, хоть добавляй, хоть не добавляй

crontab -e вызывает EDITOR, а уж что делает $EDITOR — я не знаю. У меня это vim. А вот народ ставил mcedit, и жаловался на эту проблему.

Я по мотивам какого-то треда пару лет назад тестировал это и всё работало при любом варианте

строка должна заканчиваться \n, иначе это формально не строка, а мусор. Gcc предупреждает, но компиллит. А вот как сейчас crond — я не знаю.

emulek ()
Ответ на: комментарий от Shkapinsky

А чтобы раз в сутки нужно оставить как было:

там можно и это, и любое другое валидное время поставить. Сначала минуты, а потом часы. Лучше ставить на пару минут вперёд, что-бы ждать две минуты.

emulek ()
Ответ на: комментарий от emulek

То есть он не отрабатывает потому что не добавлен в

/var/log/crond.log

а после создания такого файла и добавления в него строки, аналогичной таковой в /etc/crontab будет автоматически отрабатывать?

Shkapinsky ()
Ответ на: комментарий от Shkapinsky

То есть он не отрабатывает потому что не добавлен

не. Ты даже НЕ ЗНАЕШЬ, отрабатывается он, или нет. И если нет — то почему. А в том файле это будет написано.

/var/log/crond.log а после создания такого файла

он сам создастся, с ошибками, которые нужно исправить.

emulek ()
Ответ на: комментарий от emulek
mv: невозможно переместить «/var/share/data_drive/Disk_S/.recycled/current» в «/var/share/data_drive/Disk_S/.recycled/2014-03-05/current»: Кат$
mkdir: невозможно создать каталог «/var/share/data_drive/Disk_S/.recycled/current»: Файл существует
Shkapinsky ()
Ответ на: комментарий от Shkapinsky

Да, это была такая папка, после выполнения скрипта вручную. Я ее удалил и все запустил заново, в логе пусто после этого.

Shkapinsky ()
Ответ на: комментарий от Shkapinsky

Но все равно он не отрабатывал, так как папка должна создаваться каждый день, а они не создавались. Вот только сегодня вручную запустил - тогда создались.

Shkapinsky ()
Ответ на: комментарий от ephecaff

Спасибо! Она мне не помешает! =) Показал другому одмину - говорит что сам крон не работает, а crontab в порядке. Но вроде показывает:

root@Server-T:~# /etc/init.d/cron status
Checking periodic command scheduler...done (running).

Shkapinsky ()
Ответ на: комментарий от Shkapinsky

mv: невозможно переместить «/var/share/data_drive/Disk_S/.recycled/current» в «/var/share/data_drive/Disk_S/.recycled/2014-03-05/current»: Кат$

видимо «каталог существует»

mkdir: невозможно создать каталог «/var/share/data_drive/Disk_S/.recycled/current»: Файл существует

надо проверить, потом создавать

[ -d /var/share/data_drive/Disk_S/.recycled/current ] || mkdir /var/share/data_drive/Disk_S/.recycled/current

emulek ()
Ответ на: комментарий от emulek

Да, это после того как я вручную запустил его (скрипт), каталог создался, и при последующем запуске тоже вручную выдалась такая ошибка, так как каталог был. Я его удалил. Но кронтаб все равно не работает, не понимаю почему.

Shkapinsky ()

Сейчас содержимое /etc/crontab такое:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/scripts:/root/scripts/backup:/var/share/data_drive/Disk_S/
MAILTO=

# m h dom mon dow user  command
#17 *   * * *   root    cd / && run-parts --report /etc/cron.hourly
#25 6   * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
#47 6   * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
#52 6   1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
29 18   * * *   root    /root/scripts/recycle_clean.sh >> /var/log/crond.log 2>&1

00 21   * * 1   root    /root/scripts/backup/Disk_S.sh "= БУХГАЛТЕРИЯ" 7z 3
00 12   * * 3   root    /root/scripts/backup/Disk_S.sh "= ДИРЕКЦИЯ" 7z 3
00 00   * * 6   root    /root/scripts/backup/Disk_S.sh "= ОТДЕЛ КАДРОВ" 7z 3
00 01   * * 6   root    /root/scripts/backup/Disk_S.sh "= ОТДЕЛ ПРОДАЖ" 7z 3
00 20   * * 6   root    /root/scripts/backup/Disk_S.sh "= СКЛАД" 7z 3
00 15   * * 7   root    /root/scripts/backup/Disk_S.sh "= ЭКОНОМИЧЕСКИЙ ОТДЕЛ" 7z 3
00 18   * * 6   root    /root/scripts/backup/Disk_S.sh "= ОТДЕЛ КАДРОВ" 7z 6
#00 00  20 * *  root    /root/scripts/backup/Disk_W.sh
* * * * * root echo 'Время: ' ; date
Shkapinsky ()
Ответ на: комментарий от Shkapinsky

Но кронтаб все равно не работает, не понимаю почему.

1. исправьте ошибки в скрипте. Вот что вы мне моск полоскаете? У меня сын первоклашка, у него есть работа над ошибками. У вас какая-то альтернативная школа?

2. заведомо рабочий скрипт пропишите в crontab. Потом читайте логи.

Checking periodic command scheduler...done (running).

и что? Да, работает чего-то. У меня куча таких шедулеров. Тоже работают. Что дальше?

emulek ()
Ответ на: комментарий от Shkapinsky

не выполняет.

КУДА он должен его «выполнять»? Откуда он знает, что вы эмулятор терминала где-то внутри Xorg'а запустили?

Команда выполняется, а результата ты тупо НЕ ВИДИШЬ.

emulek ()
Ответ на: комментарий от Shkapinsky

блжад. Это то, ЧТО выполняет. А КУДА?

Обычно по дефолту оно в почту срёт. А у тебя MAILTO=. Что значит — в никуда.

emulek ()

bash: 59: команда не найдена

* * * * * root echo 'Время: ' ; date

Первый раз вижу, чтобы человек «почти осилил crontab», но в тоже время демонстрировал полное непонимание основ.

А emulek должен получать молоко за вредность.

anonymous ()
Ответ на: комментарий от emulek

Вот попробовал на машине с точно таким же шестым дебианом -

тупо написал:

* *     * * *   root    touch /home/user/hello.c
#

И файл создался. А на моем злосчастном серваке - тишина при точно такой же строке.

Shkapinsky ()
Ответ на: комментарий от anonymous

Я не очень линуксоид по всяким серверным штукам, только как пользователь - ставлю убунты и переустанавливаю убунты.

А emulek'у я очень благодарен.

Shkapinsky ()
Ответ на: комментарий от anonymous

Первый раз вижу, чтобы человек «почти осилил crontab», но в тоже время демонстрировал полное непонимание основ.

Увы. С тех пор, как изобрели гугл, это обычная ситуация.

каноничный пример:

cfdisk /dev/hda && mkfs.xfs /dev/hda1 && mount /dev/hda1 /mnt/gentoo/ && chroot /mnt/gentoo/ && env-update && . /etc/profile && emerge sync && cd /usr/portage && scripts/bootsrap.sh && emerge system && emerge vim && vi /etc/fstab && emerge gentoo-dev-sources && cd /usr/src/linux && make menuconfig && make install modules_install && emerge gnome mozilla-firefox openoffice && emerge grub && cp /boot/grub/grub.conf.sample /boot/grub/grub.conf && vi /boot/grub/grub.conf && grub && init 6

http://bash.im/quote/394695

emulek ()
Ответ на: комментарий от Shkapinsky

А на моем злосчастном серваке - тишина при точно такой же строке.

дык сделай логгирование, как я выше писал. Должно работать.

Да, куда ты прописываешь-то? И как?

Надо командой

crontab -e

emulek ()
Ответ на: комментарий от emulek

Я просто в /etc/crontab прописал ниже под всем, ну команду touch на другой машине с аналогичным дебианом. А вот на этом серваке - тоже добавил. И не отрабатывает. Крон вроде везде одинаковый. Может его переставить? Просто не хотелось бы перезапускать этот сервак. Но просто перезапуск крона не помогает.

Shkapinsky ()
Ответ на: комментарий от Shkapinsky

Во-первых, если скрипт при повторном запуске без изменения входных данных может обломаться, то это плохой скрипт: http://ru.wikipedia.org/wiki/Идемпотентность

Во-вторых, настройте почтовую подсистему (достаточно взять какой-нибудь nullmailer, чтобы слал через smtp) и настройте перенаправление почты root-а к себе на ящик (ну, или локально складывать, если на машине нет интернета/доступа к какому-нибудь smtp-серверу). Это будет полезно не только для отладки cron, но и для получения информации по многим системным событиям (smartd руту пишет, например, когда на дисках происходит что-то нехорошее).

В-третьих, чтобы закончить бессмысленные аргументы на тему того, что «cron не работает», посмотрите /var/log/syslog. Там будут строчки типа:

Mar  6 09:55:01 undertaker /USR/SBIN/CRON[1416]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Mar  6 10:00:01 undertaker /USR/SBIN/CRON[1487]: (root) CMD ([ -x /usr/sbin/dma-migrate ] && /usr/sbin/dma-migrate; [ -x /usr/sbin/dma ] && /usr/sbin/dma -q1)

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

undertaker ★★ ()
Ответ на: комментарий от undertaker

они там будут

не факт. ТС умный, мог и отключить.

emulek ()
Ответ на: комментарий от undertaker

Спасибо! Проверил /var/log/syslog

В нем:

Mar  6 10:05:01 Server-T cron[8471]: Error: bad minute; while reading /etc/crontab
Mar  6 10:05:01 Server-T cron[8471]: Error: bad minute; while reading /etc/crontab
Mar  6 10:05:01 Server-T /usr/sbin/cron[8471]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Mar  6 10:05:01 Server-T /usr/sbin/cron[8471]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Mar  6 10:05:04 Server-T smbd[20958]: [2014/03/06 10:05:04.811419,  0] modules/vfs_posixacl.c:349(smb_acl_to_posix)
Mar  6 10:05:04 Server-T smbd[20958]: [2014/03/06 10:05:04.811419,  0] modules/vfs_posixacl.c:349(smb_acl_to_posix)
Mar  6 10:05:04 Server-T smbd[20958]:   smb_acl_to_posix: ACL is invalid for set (Invalid argument)
Mar  6 10:05:04 Server-T smbd[20958]:   smb_acl_to_posix: ACL is invalid for set (Invalid argument)
Mar  6 10:10:01 Server-T cron[8471]: Error: bad minute; while reading /etc/crontab
Mar  6 10:10:01 Server-T cron[8471]: Error: bad minute; while reading /etc/crontab
Mar  6 10:10:01 Server-T /usr/sbin/cron[8471]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Mar  6 10:10:01 Server-T /usr/sbin/cron[8471]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Mar  6 10:10:14 Server-T /usr/sbin/cron[21247]: (CRON) INFO (pidfile fd = 3)
Mar  6 10:10:14 Server-T /usr/sbin/cron[21247]: (CRON) INFO (pidfile fd = 3)
Mar  6 10:10:14 Server-T /usr/sbin/cron[21248]: (CRON) STARTUP (fork ok)
Mar  6 10:10:14 Server-T /usr/sbin/cron[21248]: (CRON) STARTUP (fork ok)
Mar  6 10:10:14 Server-T cron[21248]: Error: bad minute; while reading /etc/crontab
Mar  6 10:10:14 Server-T cron[21248]: Error: bad minute; while reading /etc/crontab
Mar  6 10:10:14 Server-T /usr/sbin/cron[21248]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Mar  6 10:10:14 Server-T /usr/sbin/cron[21248]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Mar  6 10:10:14 Server-T /usr/sbin/cron[21248]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Mar  6 10:10:14 Server-T /usr/sbin/cron[21248]: (CRON) INFO (Skipping @reboot jobs -- not system startup)

Я его (крон) сегодня несколько раз рестартовал еще.

Shkapinsky ()
Ответ на: комментарий от Shkapinsky

Да, все решилось. Ошибка была такая:

root@Server:~# crontab /etc/crontab
"/etc/crontab":8: bad minute
errors in crontab file, can't install.

Ошибка была в 9 строке:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=

убрал

MAILTO=

И теперь все работает ок.

Shkapinsky ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.