在/ tmp挂载和写入后,需要运行Upstart脚本

时间:2013-11-25 20:11:12

标签: linux upstart

我有一个在Vagrant虚拟环境中运行的Ubuntu Linux服务器。我使用服务器开发Web服务。当服务器启动时,我有一个需要运行一次的shell脚本,以便在/tmp/文件系统上设置缓存目录结构。

description "setup web cache"

start on startup

script
    mkdir -p /tmp/cache/persistent
    mkdir -p /tmp/cache/models
    mkdir -p /tmp/cache/views
    chmod -R 777 /tmp/cache/
end script

当我启动服务器时,我收到一条显示在/var/log/upstart/webcache.log中的错误消息:

mkdir: cannot create directory `/tmp/cache': Read-only file system

显然startupstart on来说太早了。问题是,/tmp何时可以写作以及我将哪些内容传递给start on

3 个答案:

答案 0 :(得分:4)

由于您的作业需要在安装本地文件系统时启动,因此您很可能需要以下定义:start on local-filesystems

请参阅local-filesystem事件example

您将找到众所周知的Upstart事件here的概述。

此外,您的工作是短暂的工作,而不是服务/守护程序。使用task节更合适。通过这种方式,您可以运行依赖于实际创建这些目录后创建的缓存目录的作业。否则,如果您定义所有从属作业以启动运行级别[2345]依赖作业可能在创建所需目录之前启动,例如依赖作业可能使用以下定义:start on started webcache

description "setup web cache"

start on  local-filesystems

task

script
    mkdir -p /tmp/cache/persistent
    mkdir -p /tmp/cache/models
    mkdir -p /tmp/cache/views
    chmod -R 777 /tmp/cache/
end script

最后,您可以考虑使用Vagrant shell provisioner来创建所需的缓存目录。

答案 1 :(得分:3)

虽然@schkovich接受的答案肯定已经足够,但我想补充一点,Vagrant会发出vagrant-mounted事件。即使在local-filesystems之后也会发出此事件。我只是遇到了问题所描述的相同错误的情况,只能通过以下方式解决:

start on vagrant-mounted

来源:this博文。

答案 2 :(得分:0)

在阅读“Upstart Intro, Cookbook and Best Practises”时,我找到了一个关于“正常启动”的部分,该部分使用runlevels来触发新手脚本。如下调整我的脚本允许脚本在安装/tmp/后运行:

start on runlevel [2345]

可能还有其他同样可行的解决方案。