Обновление функций оболочки и псевдонимов с помощью переменных среды

Я решил свою проблему следующим образом:

  • запустить $ crontab -e и добавить перед всеми остальными строками SHELL = / bin / bash Это заставит cron использовать bash. Есть альтернативы , если вы хотите сделать это только для одной команды
  • my .bashrc , которая была по умолчанию для экземпляра AWS EC2 ubuntu, содержала следующие строки:

.

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

поэтому выполнение source /home/ubuntu/.bashrc ничего не сделает в задании cron. Кажется, это служит определенной цели, поэтому я не удалил его полностью, а заменил на:

# If not running interactively, don't do anything
if [ -z ${RUN_BASHRC+x} ]; then
  echo "might return";
else
  case $- in
      *i*) ;;
        *) return;;
  esac
fi

, который позволил мне установить флаг для обхода этого раннего возврата.

  • Наконец, по некоторым причинам ПУТЬ все еще не обновлялся правильно. Я мог бы исправить это, выполнив:

.

ADDITIONAL_PATH=$(sudo -Hiu ubuntu env | grep -oP "^PATH=\K.*")
PATH=$ADDITIONAL_PATH:$PATH

Я не уверен на 100%, что это делает :) но в итоге у меня такой же PATH , который я бы использовал при входе в систему с помощью ssh.

Итак, наконец:

crontab:

SHELL=/bin/bash
@reboot RUN_BASHRC=1 /home/ubuntu/startup.sh >> /home/ubuntu/cron-startup.logs

~ / .bashrc : замена выше

~ / start.sh :

#!/bin/bash
ADDITIONAL_PATH=$(sudo -Hiu ubuntu env | grep -oP "^PATH=\K.*")
PATH=$ADDITIONAL_PATH:$PATH
...

2
30.03.2016, 23:17
0 ответов

Теги

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