скрипт работает вручную, а не через crontab? - PullRequest
0 голосов
/ 04 октября 2011

Интересно, кто-нибудь имел представление, почему возникает следующая проблема, или имел какие-нибудь советы, где искать… Я могу запустить скрипт оболочки вручную в ssh, но если я настрою его для запуска в crontab, я получу проблемы ниже.

Сервер: FreeBSD 8, и у меня есть доступ ко всем корневым разрешениям

У меня есть сценарий оболочки (Bourne), который запускается с правами «root» с использованием crontab со следующей командой:

* * * * * /data/backups/scripts/server_log_check.sh > /data/backups/logs/cron_logs/server_log_check.sh_cron.log

Сценарий «server_log_check.sh» проверяет, запущен ли «сервер отчетов» с помощью этой команды:

if ps -xauww | grep -v grep | grep java | grep www > /dev/null
            then 
                            #“reports are running, no need to try to restart it”
            Else
                            /usr/local/etc/rc.d/tomcat55 start     #start report server because it is not running
            Fi

Проблема возникает в этой строке: «/usr/local/etc/rc.d/tomcat55 start», когда скрипт запускается с помощью crontab, но если я запускаю скрипт вручную через ssh, эта строка кода запускается без проблем, но весь остальной код в скрипте исполняется нормально, только не эта строка. Кроме того, если я вставлю эту строку /usr/local/etc/rc.d/tomcat55 start в командную строку ssh, она тоже будет работать нормально.

Я изменил владельца «server_log_check.sh» на «root», но это ничего не изменило, и владельцем сценария «tomcat55» является «www». Запись в crontab выполняется под профилем «Root», поэтому я предположил, что нет проблем с запуском файла, владельцем которого является разрешение арендодателя, например, «www» имеет

У вас есть идеи, почему cron делает это?

Заранее спасибо

1 Ответ

2 голосов
/ 04 октября 2011

Попробуйте добавить следующее, что также добавит ошибку в файл журнала:

* * * * * /data/backups/scripts/server_log_check.sh > /data/backups/logs/cron_logs/server_log_check.sh_cron.log 2>&1

Также измените это:

/usr/local/etc/rc.d/tomcat55 start  

на:

cd /home/root

nohup /usr/local/etc/rc.d/tomcat55 start &

Это должно создать nohup.out в /home/root.

...