在新的Ubuntu安装中,用户的PATH
是:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
但是在同一个用户的cron环境中,它是:
/usr/bin:/bin
我查看了主目录中的所有用户的点文件,没有任何内容改变PATH
。
什么改变了PATH
? 为什么不使用该PATH
?
关于这个问题 – 为什么这样 – 解释它的手册页是crontab(5)
,IOW可以通过man 5 crontab
访问(不是第一部分的默认选项)。 cron守护进程不会尝试模拟一个shell会话,而是为cron作业运行设置一个干净的,最小的环境,然后允许crontab文件设置自己的任意环境variables。 Debian附带的更新的cron守护进程还有一些额外的pam_env
等。
Cron不会在loginshell中执行进程。 因此,执行进程时,所有典型的脚本都不会被采集。
从loginshell执行进程应该复制用户的环境。
把这样的东西放在一个crontab中,比较两个输出:
*/1 * * * * /usr/bin/env > /tmp/env */1 * * * * /usr/bin/bash -l -c /usr/bin/env > /tmp/bashenv
正如你所看到的, /tmp/bashenv
将会有一大堆/tmp/env
没有的环境variables。 这是因为env
是使用bash -l
在loginshell中调用的。