cron如何设置/etc/cron.d/*和/etc/cron.d/中的环境变量?

cron如何设置/etc/cron.d/*和/etc/cron.d/中的环境变量?

在 Debian 的 cron 手册页中,

/etc/cron.d/ 中的文件独立于 /etc/crontab:例如,它们不独立,继承环境变量设置来自

以及来自 LinuxQuestions.org 论坛:/etc/crontab 与 /etc/cron.d 与 /var/spool/cron/crontabs/,

/etc/cron.d/ 中的脚本不会加载环境变量。

我假设您以 root 身份添加了命令在 /etc/crontab 文件中。如果那是事实的话执行 crontab 行将加载用户的环境变量哪个当您将脚本放入 /etc/cron.d 时,不会加载。

我想知道我突出显示的句子是什么意思? “继承”来自于什么?

  1. 为了/etc/cron.d/*cron 重置环境变量,因此不要在作业定义行中加载给定用户的环境变量。

    创建后/etc/cron.d/myjob

    35 * * * * t   echo $PATH  > /tmp/cron.log 2>&1
    

    /tmp/cron.log显示 PATH 的默认值为:

    /usr/bin:/bin
    

    这不是根目录的路径:

    $ sudo su
    # echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    
  2. 在 中/etc/crontab,我添加了

    * * * * * root   echo $PATH    > /tmp/cron.log 2>&1
    * * * * * t    echo $PATH  > /tmp/cron.log.1 2>&1
    

    那么 root 的 cron 作业的 PATH 值不是 root 的

    $ cat /tmp/cron.log
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    

    我的 cron 作业的 PATH 值也不是我的(在 中修改~/.profile

    $ cat /tmp/cron.log.1
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    $ echo $PATH
    /home/t/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/mssql-tools/bin
    
    $ less ~/.profile | grep PATH
    PATH="$HOME/bin:$PATH"
    PATH="$PATH:/opt/mssql-tools/bin"
    

谢谢。

答案1

man 5 crontab

crontab 中的活动行可以是环境设置或 cron 命令。

也就是说:未注释的行 ( #) 可能是:

PATH = /bin:/sbin

PATH这将为整个文件设置 的值crontab

如果未设置该值,则为内置值(代码内)如这个答案所示用来。

设置 PATH 的 crontab 文件示例:

SHELL=/bin/bash 
MAILTO=root
PATH=~/bin:/usr/bin/:/bin

# Edit this file to introduce tasks to be run by cron.
#.---------------- minute (m) (0 - 59)
#|      .------------- hour (h) (0 - 23)
#|      |       .---------- day of month (dom) (1 - 31)
#|      |       |       .------- month (mon) (1 - 12) OR jan,feb,mar,apr ...
#|      |       |       |       .---- day of week (dow) (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#                                       .---- user
#|      |       |       |       |       |
#*      *       *       *       *       root   echo "the command to be executed"
#
#m      h       dom     mon     dow     user   command
*       *       *       *       *       root   echo "A crontab file test"

相关内容