PATH не расширяется с помощью исходной команды в команде cron в Mac OS X

Я только что установил Mac OS X. Я не хочу использовать launchd. По какой-то причине, когда я использую свой .bash_profile в команде cron, PATH не обновляется. Однако, когда та же команда cron запускается в оболочке, PATH обновляется. Также работает ручное обновление PATH в команде cron.

Итак, эта строка cron обновляет PATH:

34       03     *              *       *  PATH=~/anaconda/bin:$PATH ; echo $PATH

Пока эта строчка cron:

34       03     *              *       *  source $HOME/.bash_profile ; echo $PATH

показывает этот результат:

From [email protected]  Thu Sep 25 03:40:01 2014
X-Original-To: anicca
Delivered-To: [email protected]
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <anicca@terrences-mbp> source $HOME/.bash_profile ; echo $PATH
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=anicca>
X-Cron-Env: <USER=anicca>
X-Cron-Env: <HOME=/Users/anicca>
Date: Thu, 25 Sep 2014 03:40:00 -0400 (EDT)

/Users/anicca/bin:/usr/local/bin:/usr/bin:/bin

но, тем не менее, та же команда в оболочке обновляет PATH:

[~/prg/binary-martingale/src]$ source $HOME/.bash_profile ; echo $PATH
/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/Users/anicca/anaconda/bin:/Users/anicca/bin:/Users/anicca/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
[~/prg/binary-martingale/src]$ 

person Terrence Brannon    schedule 25.09.2014    source источник


Ответы (3)


source встроенная команда cron не будет работать так, как вы хотите, потому что демон cron запускает подоболочку из вашего HOME каталога для выполнения вашего задания. Команда source просто предотвращает разветвление другой подоболочки в этом дочернем процессе.

Введение в cron

person anubhava    schedule 25.09.2014

Из cron вы должны запустить свой сценарий оболочки, например

34       03     *              *       *  /path/to/my/script.sh

и в script.sh вы должны настроить необходимое окружение.

person jm666    schedule 25.09.2014

Вот сценарий, который можно использовать для создания исходного файла .bashrc или .bash_profile, а затем выполнить командную строку:

#!/bin/bash -x

source ~/.bash_profile

echo "CMDLINE: $@"
echo "PATH: $PATH"

eval $@
person Terrence Brannon    schedule 25.09.2014