当前位置: 首页 > 面试题库 >

在哪里可以设置crontab将使用的环境变量?

赫连正初
2023-03-14
问题内容

我的crontab每小时运行一次。.bash_profile当用户从终端运行作业时,运行它的用户在工作中具有环境变量,但是,显然,crontab在运行时不会被环境变量吸收。

我尝试过将它们放入.profile.bashrc但是它们似乎仍然没有被捡起。有谁知道我可以将crontab可以接收的环境变量放在哪里?


问题答案:

在运行命令之前,让’cron’运行一个设置环境的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

〜/ bin / Cron中的脚本都是指向单个脚本“ runcron”的链接,如下所示:

:       "$Id: runcron.sh,v 2.1 2001/02/27 00:53:22 jleffler Exp $"
#
#       Commands to be performed by Cron (no debugging options)

#       Set environment -- not done by cron (usually switches HOME)
. $HOME/.cronfile

base=`basename $0`
cmd=${REAL_HOME:-/real/home}/bin/$base

if [ ! -x $cmd ]
then cmd=${HOME}/bin/$base
fi

exec $cmd ${@:+"$@"}

(使用较旧的编码标准编写-如今,我一开始会使用shebang’#!’。)

“〜/ .cronfile”是我的个人资料的一个变体,供cron使用-
严格不交互式,也不会因为吵闹而回声。您可以安排执行.profile等。(REAL_HOME的东西是我所处环境的伪像-您可以假装它与$ HOME相同。)

因此,此代码读取适当的环境,然后从我的主目录执行命令的非Cron版本。因此,例如,我的“工作日”命令如下所示:

:       "@(#)$Id: weekday.sh,v 1.10 2007/09/17 02:42:03 jleffler Exp $"
#
#       Commands to be done each weekday

# Update ICSCOPE
n.updics

“每日”命令比较简单:

:       "@(#)$Id: daily.sh,v 1.5 1997/06/02 22:04:21 johnl Exp $"
#
#       Commands to be done daily

# Nothing -- most things are done on weekdays only

exit 0


 类似资料:
  • 问题内容: 我有一个Perl脚本,其中有一个类似的变量。我们可以将$ name的内容设置为可以导入其他文件并在其他文件中使用的环境变量吗? 我尝试过,但是这不起作用。 问题答案: 如果要影响您的进程或子进程的环境,请使用哈希: 如果要影响父进程的环境,则不会。至少没有父进程的合作。标准过程是发出shell脚本并让父进程执行该shell脚本: …并从shell(脚本)中调用该脚本为:

  • 问题内容: 如果我在终端输入 … shell在哪里存储该环境变量? 我正在使用Ubuntu 8.10。我查看了文件〜/ .profile和/ etc / profile,找不到DISPLAY的痕迹。 问题答案: 进程的环境变量在运行时存在,并且未存储在某些文件中。它们存储在进程自己的内存中(在那里,它们会传递给子进程)。但是其中有一个虚拟文件 该文件显示了在调用进程时传递的所有环境变量(除非进程覆

  • 我是一个巨大的初学者,所以我不太了解包是如何真正工作的。我知道你应该在你的项目文件夹中创建一个虚拟环境,以避免版本冲突等,你不应该把你的实际项目文件放在虚拟环境中。因此,如果您的项目文件位于与虚拟环境相同级别的项目目录中,您的项目文件可以“访问”虚拟环境中安装的东西吗?目录之外的文件可以访问虚拟环境中的包吗?

  • 我使用的是一个从jar实现Serializable的类,为了确保不会出现编译器相关的问题,我给了它一个serialVersionUID私有静态final long serialVersionUID=123L; 然后我重新创建了jar,但现在当我在新jar中使用类时,它给了我一个例外: invalidClassException:com.placeiq.piqhash.piqdeviceID;本地类

  • 问题内容: 在中,我有以下脚本正在工作: Bash中的功能等效于什么? 有直接的模拟吗?环境变量用于查找可执行文件。 问题答案: 将VAR设置为value。如果需要空格,请用单引号将其引起来。如果要对变量进行插值,请使用双引号,例如。

  • 问题内容: 我在下面的代码中只想设置一个环境变量: 运行此文件: 该调用可以正确打印,但是随后我希望在会话中也设置此env变量,但是: 什么都没有,它是空的。这是预期的行为吗?如果是这样,我如何使这个env变量在我的会话中保持不变,并使用类似这样的程序对其进行设置? 问题答案: 创建新流程时,将复制父流程的环境。在新流程中对环境所做的更改不会影响父流程。修改环境后,您必须让程序启动Shell。