Я пытаюсь использовать функции, определяемые в /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
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
* * * * * /bin/sh .....
Вы не запускаете bash
, вы запускаете sh
, поэтому не следует ожидать загрузки .bashrc
!
Попробуйте вместо этого:
* * * * * /bin/bash .....
Другая проблема может заключаться в том, что скрипт Ubuntu по умолчанию .bashrc
запускается с этой защитой:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Любые добавленные ниже строки не будут загружены вашим кроном. скрипт, потому что cronjobs не работают в интерактивной среде.
Решение: Поставьте функции для скриптов выше этого стража. Сохраните настройки для пользователя ниже этого охранника.
В некоторых системах мне проще всего использовать --login
, чтобы гарантировать, что в оболочку загружены те же вещи, что и в командной строке.
* * * * * bash --login /path/to/script.sh
* * * * * bash --login -c "your command here"