Вызов скриптов из других скриптов

У меня есть сценарий, который я вызываю каждые 10 минут с помощью cronjob:

* / 10 * * * * ~ / mydirectory / myscript.sh

Теперь внутри ~/mydirectory есть еще один скрипт, скажем, myotherscript.sh который я бы хотел вызвать изнутри myscript.sh . Оба сценария были выполнены в chmod ' ed, и когда я выполняю myscript.sh из командной строки внутри ~/mydirectory все работает нормально. Я выполняю его следующим образом:

, myscript.sh

Но это не похоже на работу cronjob. Когда я удаляю ссылку на второй скрипт изнутри первичного скрипта, он работает, хотя я подозреваю, что что-то не так с тем, как я ссылаюсь на второй скрипт. Вот как выглядит содержимое myscript.sh :

 #! /bin/bash do-something do-something-else . myotherscript.sh - #! /bin/bash do-something do-something-else . myotherscript.sh 

Может быть, при запуске cronjob текущий каталог не является ~/mydirectory и поэтому cronjob не может найти файл myotherscript.sh ? Если да, то как мне заставить его посмотреть файл? Я не хочу указывать абсолютный путь внутри первичного скрипта, поскольку я мог бы переместить его (и myotherscript.sh ) в другой каталог в какой-то момент, или я могу захотеть переименовать ~/mydirectory в какой-то момент, и я не хочу то вам нужно изменить содержимое myscript.sh для ссылки на новый абсолютный путь.

ВОПРОС БОНУСА: Прямо сейчас, когда пришло время выполнения cronjob, я в основном просто держу большие пальцы и надеюсь на лучшее, но у меня нет способа увидеть, было ли это успешным, и если это не удалось, почему это не удалось. Любые советы о том, как я могу понять, почему cronjob не выполнялся так, как ожидалось?

  • Лучше ли использовать $ (pwd) или $ PWD?
  • Группировка строк в гетерогенные подмножества
  • В чем разница между запуском «bash script.sh» и «./script.sh»?
  • Сценарий оболочки для объединения файлов свойств (sed / awk / comm / diff) для обновления rpm
  • Перемещение файлов по каталогам по критериям глубины
  • Двоичный поиск неисправной линии
  • Замена Bash Combine и экстракция субструн за один шаг
  • perl one liner + как соответствовать IP-адресу, который находится в поле файла first / sec
  • 4 Solutions collect form web for “Вызов скриптов из других скриптов”

    Хорошо, так ответ Гленна Джекмана работает, и он также ответил на мой вопрос о бонусе, но с тех пор я понял, что еще один, и я считаю, что это более элегантный способ убедиться, что cronjob работает в каталоге, в котором находятся скрипты.

    Просто заменив

     */10 * * * * ~/mydirectory/myscript.sh 

    с

     */10 * * * * cd ~/mydirectory && ./myscript.sh 

    И это решает проблему. Все работает.

    Вы неправильно вызываете скрипт. Должен быть:

     #! /bin/bash do-something do-something-else ./myotherscript.sh; - #! /bin/bash do-something do-something-else ./myotherscript.sh; 

    myscript должен иметь:

     cd "$(dirname "$0")" . ./myotherscript.sh 

    Когда cron запускает ваш скрипт, $ PWD может быть / поэтому вы должны пойти туда, где находится ваш скрипт, если вы хотите использовать относительные пути.

    Возможно, вам будет полезно записать вывод вашего скрипта:

     */10 * * * * ~/mydirectory/myscript.sh 2>&1 | /usr/bin/ts '[%FT%T]' >> ~/mydirectory/myscript.log 

    ts добавляет метку времени для каждой строки ввода. На Fedora и Ubuntu он находится в пакете moreutils .

    Определение PATH и MAILTO внутри crontab должно помочь.

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.