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

Mar*_*nos 4 shell centos cron

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

58 12 * * * cd /home/joe/dev; echo `pwd` | logger
Run Code Online (Sandbox Code Playgroud)

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

Feb 19 12:58:01 srv01 joe: /home/joe
Run Code Online (Sandbox Code Playgroud)

而不是输出:

Feb 19 12:58:01 srv01 joe: /home/joe/dev
Run Code Online (Sandbox Code Playgroud)

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

小智 6

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

更新:以上是猜测和/或提议的可能性(作为评论如此简洁和积极地指出)。所以我决定在 CentOS 6.6 上测试......我错了......以下 crontab 条目正常工作:

* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;
Run Code Online (Sandbox Code Playgroud)

所以这应该对你有用......我仍然认为你最好通过在你的 crontab 中调用脚本而不是单个命令来服务......但这是一个偏好(所以请在评论中保持友好......)。

  • 这里的很多“答案”都是猜测。这不一定是坏事。有根据的猜测对于引导人们解决问题非常有帮助。 (2认同)

小智 5

以下应该工作:

58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)
Run Code Online (Sandbox Code Playgroud)

通过将命令括在括号中,您应该强制它们都在同一个子 shell 中运行。