2013-02-17 2 views
1

Так что я ДУМАЮ, что это скорее всего путь. Но я смущен тем, как правильно это установить.Нужна помощь в настройке cron. Скрипт отлично работает в ssh

Так верхняя часть моего сценария выглядит следующим образом:

#!/bin/sh 


MYSQL="$(which mysql)" 
if [ -z "$MYSQL" ]; then 
    echo "Error: MYSQL not found" 
    exit 1 
fi 

при запуске сценария в SSH, это работает префект! Но когда я настроить хрон, с помощью этих команд в DirectAdmin:

/home/username/script.sh 

также попытался:

/bin/sh /home/username/script.sh 

Оба они дают мне следующую ошибку:

Error: MYSQL not found 

Так вот что Я нашел онлайн:

SHELL=/bin/sh 
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin 
HOME=/var/log 

Я предполагаю, что мне нужно добавить хотя бы одно из приведенных выше утверждений в моем скрипте. Сервер является сервером freebsd, и я предполагаю, что все находится в местоположении по умолчанию. Я знаю, когда я делаю whereis sh, он возвращает/bin/sh

Я понятия не имею, как проверить PATH или дома. Я новичок в freebsd, поэтому любая помощь будет отличной.

Спасибо, Brian

ответ

0

Я только сделать обоснованное предположение, что я знакома только с Debian, но хроны работают задачи, как корень и запускают их неинтерактивны. Это означает, что он получает тот же путь, что и ваш пользователь root, и обычно неинтерактивные запросы выходят из .bash_profile до того, как будут установлены пути.

TL; DR: Убедитесь, что ваш пользователь root имеет переменную MYSQL и проверяет, что файл .bash_profile пользователя root не выходит из неинтерактивных запросов.

1

Работы Crontab представлены системой и не выполняют обычный сценарий запуска системы (который устанавливает PATH и другие подобные вещи).

Я вся моя работа в оболочке Korn на Solaris и добавить строки, подобные этим в начале всех моих сценариев:

#!/bin/ksh 
#------------------------------------------------------------------------------- 
# /opt/app/batch/daily_dns.ksh Daily DNS Batch process via crontab 
# 16 3 * * * /opt/app/batch/dns/bin/daily_dns.ksh > /opt/app/batch/daily_dns.log 
#------------------------------------------------------------------------------- 
. /etc/profile 

Вы, вероятно, нужно сделать что-то подобное.

0

Вы можете прочитать справочную страницу env (1) и использовать ее как для диагностики &, исправить вашу проблему, или просто исправить среду из сценария, если хотите.

Как вы упомянули, это сервер freebsd, я предполагаю, что у вас установлен mysql в/usr/local - который не включен в значение $ PATH по умолчанию cron.

0

Это связано с проблемами PATH. Вы можете указать переменные пути в вашем файле crontab в соответствии с приведенными выше ответами или изменить свой скрипт.

В случае, если вы решили принять решение о последнем, вот то, что необходимо изменить,

  1. На вашем стандартном терминале запустите «, который который», чтобы узнать точный путь из «который» инструмент в вашей системе (обычно «/usr/bin/which»)
  2. Замените команду «который» в вашем скрипте с полным путем.

Теперь вы можете хрон сценарий, используя - "/бен/ш/путь/к/файл/скрипт", в кронтаб. В этом случае вам не нужно добавлять дополнительные переменные пути в файл crontab.

Надеюсь, это поможет.

Смежные вопросы