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

为什么 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

答案1

以下应该有效:

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

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

答案2

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

更新:以上内容是猜测,和/或建议的可能性(正如评论如此简洁而积极地指出的那样)。所以我决定在 CentOS 6.6 上进行测试,结果...我错了...以下 crontab 条目正常工作:

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

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

答案3

按照这个Unix&Linux SE答案,您可以替换;&&,因为不同 Linux 发行版中的不同版本的 cron 以不同的方式处理此类功能:

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

相关内容