我有一个 Ubuntu 14.04 LTS 服务器,在 Supervisor 下运行几个不同的程序。许多程序需要在文件系统上存储套接字和其他命名管道,并且/run
似乎是这些类型文件的理想选择。不幸的是,/run
每次重新启动时都会删除 tmpfs,并且需要 root 权限来(重新)创建每个程序可以写入的目录。
我需要一种方法来创建一些子目录/run
并将所有者/模式设置为每个程序可以使用的东西,并在每次重新启动时在 Supervisor 尝试启动它们之前这样做。看起来 Supervisor 不支持在启动程序之前运行预启动命令的机制。
此类问题的大多数其他答案都建议在 init 脚本中执行此操作,但这属于 Supervisor 的包,我不想弄乱它(或者在上游更改时必须维护它)。
如果这台机器有 Systemd 似乎我可以使用/etc/tmpfiles.d
,但事实并非如此。
我想出的最好主意是pre-start
为每个程序使用单独的 Upstart 脚本,该脚本只创建目录而不实际启动任何进程。就像是:
/etc/init/myapp1.conf
start on runlevel [2345]
pre-start script
mkdir -p -m 0755 /var/run/myapp1
chown app1user: /var/run/myapp1
end script
...没有任何exec
线路。我不是 100% 确定这是有效的还是理智的,但它似乎有效。有没有更清洁的方法来做这样的事情?