如何在 crontab 中使用导出命令运行 shell 脚本

如何在 crontab 中使用导出命令运行 shell 脚本

我有一个 shell 脚本出口执行时变量的值。另一个脚本中将使用相同的值。
如何运行这个脚本(测试文件)在 cron 中。

#!/bin/sh
export I="10"
echo $I

我将使用 root 访问权限来执行 cron。我尝试了这个命令:

*/5 * * * * /home/ubuntu/backup/.test.sh

我检查了环境变量,没有任何更新。

答案1

环境变量只能在进程和直接子进程之间传递。它无法更改环境变量或将环境变量导出到不同的进程树。此外,导出的变量只能用于再次处理当前进程的直接后代,而不是在导出完成的同一级别。

答案2

事实上,变量不会在 cron 中的脚本之间共享。即使您定义了一个环境变量,如 联机帮助页如果您有一个更改该变量的脚本,那么第二个脚本不会真正更改该变量。但是,您可以使用临时文件(如果您不想重写磁盘上的文件,甚至可以在内存中创建它)在脚本之间使用。

例如:

10 * * * * /path/to/script1.sh
20 * * * * /path/to/script2.sh

script1.sh的内容:

#!/bin/bash
echo "VAR1='VALUE1'" > /dev/shm/cronsharedfile

script2.sh的内容:

#!/bin/bash
source /dev/shm/cronsharedfile
do_something_with $VAR1

在这种情况下,第二个脚本将具有由 script1.sh 分配的正确值。我使用了保存在共享内存中的文件(/dev/shm/cronsharedfile),但您可以在磁盘上创建文件(/path/to/whateverfile)。

答案3

如果图中有 2 个脚本,则第一个脚本中导出的变量将对下一个脚本可见。所以,如果你有一个像这样的 cron 条目

*/5 * * * * ( test1.sh; test2.sh ) > log.txt

测试1.sh作为

#!/bin/sh
export I="10"
echo $

然后$I将可见测试2.sh

相关内容