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

У меня есть сценарий, который я вызываю каждые 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?
  • Как перебирать каждый файл в FTP-каталоге с помощью сценария bash
  • Комбинированные переменные с переменными входами в одну строку
  • Как я могу установить переменную среды постоянно через сценарий оболочки?
  • сценарий оболочки для проверки состояния переданной строки
  • EOF блокирует мой скрипт?
  • Скрипт для удаления определенных элементов span из файла HTML
  • Выполнение сценария из обработчика события Nagios не запускается
  • 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

    Как имитировать отказ аппаратного обеспечения GPU?

    Прокручивайте файлы и конвертируйте BMP-файлы в JPG

    поиск домена в resolv.conf не добавляется к хостам при выполнении ping или другой сетевой коммутации

    Компиляция GNU Octave не выполняется с помощью libinterp / .libs / liboctinterp.so: неопределенная ссылка на `Magick :: *

    Медленный пинг еще быстрее, если удаленное устройство работает одновременно (по локальной сети)

    как вывести вывод поиска в другой поиск

    Установка apr (apt-get install libapr1-dev libssl-dev) в моей Linux-системе, дающей мне ошибки

    Заблокировать определенный URL-адрес?

    Установление и настройка Arch Linux в VirtualBox будет таким же, как установка его на самом деле?

    Teamviewer не готов

    Почему подстановка командной строки здесь считается одной строкой?

    «Виртуальное супер разрешение»

    Развернуть раздел

    BIND-сервер не распознает мою зону должным образом

    Зашифрованная карта SD повреждена

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