d a*_*s y 5 cron environment-variables
我创建了一个简单的脚本来检查从 crontab 运行的环境变量。
#!bin/bash
echo $USER > cron.txt
Run Code Online (Sandbox Code Playgroud)
在主目录中保存为 script.sh。
Crontab 设置: */1 * * * * ./script.sh
如果我手动运行它,它可以工作,但不能从 crontab.Output 中显示我的用户名在 cron.txt 文件中,但它没有。
当 cron 执行您的作业时,它是在与您当前的 shell 环境不同的环境中执行的。
这意味着,例如,./script.sh
可能找不到。
有两种解决方案:
*/1 * * * * ( cd $HOME/mydir && ./script.sh )
Run Code Online (Sandbox Code Playgroud)
或者
*/1 * * * * $HOME/mydir/script.sh
Run Code Online (Sandbox Code Playgroud)
即,准确指定可以找到脚本的位置。
如果脚本中的输出文件不使用绝对路径名,则第一种选择可能更可取。
如果您使用第二个选项,请修改您的脚本,以便您知道输出文件的去向:
#!/bin/bash
echo "$USER" >"$HOME/mydir/cron.txt"
Run Code Online (Sandbox Code Playgroud)
或者
#!/bin/bash
( cd "$HOME/mydir" && echo "$USER" >cron.txt )
Run Code Online (Sandbox Code Playgroud)
请注意,该#!
行必须包含正确的绝对路径bash
(您的是相对路径)。
还应该注意的是,某些 Unices (Linux)USER
上的 cron没有设置为运行 cron 作业的用户的用户名。在这些系统上,在调用脚本时$LOGNAME
改用或设置USER
为$LOGNAME
:
*/1 * * * * env USER=$LOGNAME $HOME/mydir/script.sh
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5680 次 |
最近记录: |