作业配置文件本身无法访问定义的环境变量。
Upstart 允许您设置环境变量,这些环境变量将可供定义它们的作业配置文件的作业访问。
如8.2 环境变量中所述:
请注意,作业配置文件无权访问用户的环境变量,甚至超级用户也无权访问。这是不可能的,因为创建的所有作业进程都是 init 的子进程,它没有用户环境。
定义的作业可以访问定义的变量 $SERVICE_ROOT。
# /etc/init/test.conf
env SERVICE_ROOT="/data/service_root"
script
export LOG_DIR="$SERVICE_ROOT/logs"
# prints "LOG_DIR='/data/service_root/logs'" to system log
logger -t $0 "LOG_DIR='$LOG_DIR'"
exec /home/vagrant/test.sh >> /tmp/test.log
end script
在脚本块中导出的变量 $LOG_DIR可用于在同一块中调用的进程。
#!/bin/bash -e
# /home/vagrant/test.sh
echo "running test.sh"
echo "\n`env`" | grep 'LOG_DIR\|SERVICE_ROOT'
运行sudo start test
后 /tmp/test.log 的内容将是:
running test.sh
SERVICE_ROOT=/data/service_root
LOG_DIR=/data/service_root/logs
在系统日志中,您会发现:
7 月 16 日 01:39:39 vagrant-ubuntu-raring-64 /proc/self/fd/9: LOG_DIR='/data/service_root/logs'