我刚刚安装了Mac OS X.我不想使用launchd。出于某种原因,当我在cron命令中获取.bash_profile时,PATH不会更新。但是,当在shell上运行相同的cron命令时,PATH会更新。也可以手动更新cron命令中的PATH。
所以这个cron行更新了PATH
:
34 03 * * * PATH=~/anaconda/bin:$PATH ; echo $PATH
虽然这个cron行:
34 03 * * * source $HOME/.bash_profile ; echo $PATH
显示了这个结果:
From anicca@terrences-mbp.home Thu Sep 25 03:40:01 2014
X-Original-To: anicca
Delivered-To: anicca@terrences-mbp.home
From: anicca@terrences-mbp.home (Cron Daemon)
To: anicca@terrences-mbp.home
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
但是shell中的相同命令确实会更新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]$
答案 0 :(得分:2)
source
内置命令无法按照您想要的方式运行,因为 cron守护程序会从您的HOME目录启动子shell 来运行您的作业。 source
命令仅阻止在该子进程中分支另一个子shell。
答案 1 :(得分:0)
你应该从cron开始你的shell脚本,例如
34 03 * * * /path/to/my/script.sh
并在script.sh
中设置所需的环境。
答案 2 :(得分:0)
这是一个可用于获取.bashrc或.bash_profile然后执行命令行的脚本:
#!/bin/bash -x
source ~/.bash_profile
echo "CMDLINE: $@"
echo "PATH: $PATH"
eval $@