为什么cd不会更改crontab中的当前目录?

在我的用户的crontab中,在CentOS系统上,我有这样的东西:

58 12 * * * cd /home/joe/dev; echo `pwd` | logger 

这在/ var / log / messages中输出:

 Feb 19 12:58:01 srv01 joe: /home/joe 

而不是输出:

 Feb 19 12:58:01 srv01 joe: /home/joe/dev 

为什么在输出pwd时目录不能保留?

这些命令是独立运行的,因此与期望它们在同一个shell /环境下运行是不一样的。 通过创build一个执行所需命令的shell脚本,然后从crontab调用脚本,可能会更好地为您服务。

更新:上面是一个猜测,和/或提出的可能性(作为一个评论,如此简洁和积极指出)。 所以我决定在CentOS 6.6上进行testing,而且我错了……下面的crontab条目正常工作:

 * * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger; 

所以这应该适合你…我仍然认为,你最好的服务器通过调用脚本不是你的crontab中的单个命令…但是这是一个偏好(所以请在评论…)。

以下应该工作:

 58 12 * * * (cd /home/joe/dev; echo `pwd` | logger) 

通过将这些命令包装在圆括号中,您应该强制它们全部在相同的子shell中运行。

根据这个Unix和Linux SE的答案 ,你可以取代;&&不同版本的cron跨不同的Linux发行版以不同的方式处理这种types的function:

 cd /home/joe/dev && echo `pwd` | logger