cron
与命令行相比,还有另一个可能影响程序运行的特征问题(除了%
Robert Gamble 描述的对“ ”符号的解释)。
这种差异在于环境。如果程序运行依赖于特殊的环境变量,那么当你从命令行运行它时,它会在你通常使用的环境下运行,如果你运行它,它可能会运行,at
因为它会在你创建作业时捕获环境. 但cron
没有特殊的环境设置。
因此,我习惯性地配置cron
为通过绝对路径名运行脚本,并且该脚本执行我需要的环境设置($HOME/bin
例如,将我的目录添加到 PATH)。我什至有一个标准化的基础设施——一个设置环境和运行其他程序的 shell 脚本。
# @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $
# Crontab file for Home Directory for Jonathan Leffler (JL)
#-----------------------------------------------------------------------------
#Min Hour Day Month Weekday Command
#-----------------------------------------------------------------------------
0 * * * * /usr/bin/ksh /work1/jleffler/bin/Cron/hourly
1 1 * * * /usr/bin/ksh /work1/jleffler/bin/Cron/daily
23 1 * * 1-5 /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
2 3 * * 0 /usr/bin/ksh /work1/jleffler/bin/Cron/weekly
21 3 1 * * /usr/bin/ksh /work1/jleffler/bin/Cron/monthly
中的脚本/work1/jleffler/bin/Cron
设置环境,然后运行同名的脚本/work1/jleffler/bin
来完成实际工作。Cron
子目录中的名称实际上都是指向同一个脚本的链接。