Bashrc, сценарий оболочки и crontab

Я пытаюсь использовать функции, определяемые в /home/my_username/.bashrc в сценарии оболочки, который выполняется crontab.

#crontab -l

# m h  dom mon dow   command
  * *  * * * /bin/sh /home/my_username/CronTab_shell_script.sh >> /home/my_username/Desktop/file.log  

Скажем, у меня есть смонтированный () функция, сохраненная в

/home/my_username/.bashrc 

function mounted(){

    if mount|grep $1; then
    echo "mounted"
    else
    echo "not mounted"
    fi

 }

Как я могу назвать и использовать смонтированный () функция от

/home/my_username/CronTab_shell_script.sh
0
задан 13 September 2017 в 04:43

2 ответа

Cron работает с ограниченной оболочкой и не будет иметь доступа к вашей обычной среде.

Вы можете поместить source /home/my_username/.bashrc в начале /home/my_username/CronTab_shell_script.sh, чтобы сделать функцию доступной.

Вы также можете получить свой .bashrc в вашем crontab:

#crontab -l

# m h  dom mon dow   command
  * *  * * * . /home/my_username/.bashrc; /bin/sh /home/my_username/CronTab_shell_script.sh >> home/my_username/Desktop/file.log
2
ответ дан 2 November 2019 в 06:50

1. Запустите правильную оболочку

* *  * * * /bin/sh .....

Вы не запускаете bash, вы запускаете sh, поэтому не следует ожидать загрузки .bashrc!

Попробуйте вместо этого:

* *  * * * /bin/bash .....

2. Обходной путь по умолчанию в Ubuntu .bashrc

Другая проблема может заключаться в том, что скрипт Ubuntu по умолчанию .bashrc запускается с этой защитой:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Любые добавленные ниже строки не будут загружены вашим кроном. скрипт, потому что cronjobs не работают в интерактивной среде.

Решение: Поставьте функции для скриптов выше этого стража. Сохраните настройки для пользователя ниже этого охранника.

3. Загрузка полной среды входа пользователя

В некоторых системах мне проще всего использовать --login, чтобы гарантировать, что в оболочку загружены те же вещи, что и в командной строке.

* *  * * * bash --login /path/to/script.sh

* *  * * * bash --login -c "your command here"
2
ответ дан 2 November 2019 в 06:50

Другие вопросы по тегам:

Похожие вопросы: