Cron: Setting PATH from shell script not working
我在CentOS中编写了一个简单的shell脚本,并在cron作业中执行这个脚本。我的脚本如下:
1 2 3 4 5
| #!/bin/bash
export PATH=$PATH:$(pwd)
echo $PATH
echo $PATH| mail -s"PATH" [email protected] |
如果我直接从终端执行这个脚本,它输出如下:
1
| /sbin:/bin:/usr/sbin:/usr/bin:/vagrant |
哪里是我所期望的。
但是,如果这是从cron作业执行的,它输出(在我的邮件中)如下:
如何在从cron作业执行时正确设置/移动?
更新:我可以将/vagrant设置为path,但它只对我有用。如果我将脚本部署到其他用户,他们必须创建这个目录。所以我想让脚本像从运行位置导出一样。
在我的例子中,我的脚本是从/vagrant运行的,但是当前目录被导出为/root。这就是问题所在。
更新:遗憾的是,路径导出正确,但报告未找到/vagrant目录中的文件。
- 好吧,通过指定/vagrant。$(pwd)根据实际情况解析当前工作目录。
- cron运行在不同的环境中,因此不能假定与用户运行时相同的值。如果您想添加/vagrant,只需硬编码即可。如果要使用变量,请检查在哪里可以设置crontab将使用的环境变量?
- 另外,您想使用什么:当前工作目录(pwd)或脚本所在的目录?
- 脚本所在的目录。
- 对于这个部分,您可能需要检查bash脚本是否可以告诉它存储在哪个目录中?.
cron作业在所有者的主目录中运行,因此当它运行时,pwd就是这样产生的。把你想要的目录放进去。
顺便说一下,您不能(可靠地)使用bash语法export variable=value,因为cron运行普通sh。无论如何,不需要使用export的PATH变量,因为它本身就已经被导出了(如果没有,它就不能工作)。
- 克罗恩可以按你的要求去做,不是吗?你可以说* * * * * /bin/bash /home/me/script.sh。
- @当然,Fedorqui是正确的;但是一个可能的错误是,如果操作没有通过shebang运行脚本,或者尽管shebang明确地指定sh。不管怎样,我想现在还没有。