在 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 时,不会加载。
我想知道我突出显示的句子是什么意思? “继承”来自于什么?
为了
/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
在 中
/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"