?

Log in

No account? Create an account
Previous Entry Поделиться Next Entry
отладка crontab в tomatousb
redddis wrote in ru_linux
сделал некий скрипт на bash
ручками запускаю - все отрабатывает.
пытаюсь добавить его ежеминутное исполнение через cru -a, в cru -l вижу появившуюся запись, но скрипт не работает.
нашел параллельно работающий crontab, добавляю туда - в логах вижу запись
Feb 1 03:27:01 tomatousb cron.info cron[1685]: (root) CMD (/opt/123/1.sh > /dev/null 2>&1)
но скрипт нифига не работает.
и да, при запуске в терминале оно ничего в терминал не выдает, так что эта галочка и dev/null может и не нужна вовсе.
в самом скрипте - if, curl, echo > file и чтение из файла. у самого скрипта и у файла разрешения -rwxrwxrwx
куда смотреть и как эксепшны скрипта куда-то в лог пихать - хз.
может у крона есть более подробный лог?
Метки: ,

  • 1
на самом деле проблему решил сразу же, как только отправил пост на модерацию - надо было указать в скрипте указать абсолютные пути к файлу. очевидно, тестовые прогоны запускались из той же папки, где находился файл. а вот по крону - с путями выходила лажа.

но остальную часть про отладку - в принципе было бы интересно. или там подобных возможностей для таких глюков не так много? (про поправить права к файлу я догадался перед постом)

С правами вы несколько перестарались, однако…

это да.
в свое оправдание: надо было по-быстрому разрешить запись всем (хотя сколько их всех в этой томате - тот еще вопрос), а я помнил только волшебные три топора, которые делают всем всё можно. из скрипта там запись жесткая либо 0 либо 1. другими средствами там и так можно файлов напридумывать. так что про безопасность я особо не переживаю (хотя наверное и зря)

Вы разрешили запись всем пользователям в файл скрипта. Соответственно, кто-то может этот скрипт изменить, а затем этот скрипт выполнится по расписанию. Если вы указали запуск скрипта например от рута, то по сути, все пользователи системы имеют неогранияенные права в системе через этот скрипт.

то есть самому скрипту надо дать право только на исполнение от рута и от админа (как узнать, разные ли это сущности? и есть ли там вообще другие пользователи? собственно, я туда по ssh логинюсь как root) + на запись чтение/запись от админа
а файлу, с которым работает скрипт - только на чтение и запись?

там есть root, nas и nobody
и хз кто это и зачем они.
что означают эти строчки в /etc/passwd?
nas:x:100:100:nas:/dev/null:/dev/null

Можно попробовать >/tmp/log.txt 2>&1 , и там посмотреть детали. И ещё в почте root'а, туда могут отправиться сообщения, если какие-то проблемы с запуском из cron'а.

А кто такое cru? Никогда такой команды не встречал.

погуглю про почту рута. но первый, наверное, самый правильный вариант - тут все усечено до безобразия.
cru - типа обертки или самопальной реализации cron
хз зачем они добавили туда эту ноую сущность. у cru есть три команды: показать, добавить, удалить. все.

Да чё там гуглить - см. в /var/spool/mail/root

нету такого)
в spool только cron->crontab->root и все.
на маке, кстати, тоже нету mail. есть mqueue, но не для всех

Ну мак - это другая система, а в линуксе стандартное место для складывания локальной почты - /var/spool/mail/

Смотри переменную PATH. В кроне и у пользователя содержимое различается. Поэтому, либо полные пути прописывать, либо вручную в начале скрипта задавать переменную PATH.

ну вот да, догадался. а как узнать PATH у крона?

Выполни скрипт:
echo $PATH > /tmp/PATHCron
Ну, либо любой другой файл, куда от пользователя прописанного в кроне можно будет сделать запись.
Я же с этим уже давно не заморачиваюсь, и во всех своих скриптах в начале пишу вот такую конструкцию:
PATH="сюда вставляю содержимое переменной пользователя root":$PATH
Соответственно, эта конструкция добавляет перед родной переменной крона содержимое переменной рута.

Я первое что подумал - selinux, целевой файлик в /opt и audit.log

Молодец, что разобрался сам!

  • 1