我有一个非常简单的upstart配置来维护yas3fs挂载。

start on filesystem
stop on runlevel [!2345]

respawn
kill timeout 15
oom never
expect fork

script
    . /etc/s3.env
    export AWS_ACCESS_KEY_ID
    export AWS_SECRET_ACCESS_KEY
    exec /opt/yas3fs/yas3fs.py /mnt/something --url=s3://something --cache-path=/mnt/s3fs-cache --mp-size=5120 --mp-num=8
end script'

结果是我得到了两个yas3fs.py运行的副本。一个看起来正确地安装了s3 bucket,但另一个则不断地被upstart更新(可能是因为另一个bucket运行时出错)。
如果我投进一个“期望叉子”,工作就永远不会正确开始。我只想能够让这个简单的挂载安全地重新启动,停止等作为一个新贵的工作。思想?

最佳答案

我不是新贵专家,但这个脚本应该可以工作:

start on (filesystem and net-device-up IFACE=eth0)
stop on runlevel [!2345]

env S3URL="s3://BUCKET[/PREFIX]"
env MOUNTPOINT="/SOME/PATH"

respawn
kill timeout 15
oom never

script
    MOUNTED=$(mount|grep " $MOUNTPOINT "|wc -l)
    if [ $MOUNTED = "1" ]; then
        umount "$MOUNTPOINT"
    fi
    exec /opt/yas3fs/yas3fs.py "$MOUNTPOINT" --url="$S3URL" --mp-size=5120 --mp-num=8 -f
end script

pre-stop script
    umount "$MOUNTPOINT"
end script

诀窍是让yas3fs在前景中保留'-f'选项,否则似乎有太多的分叉需要管理。
如果yas3fs以某种错误的方式(例如“kill-9”)死亡,我添加了一个检查来清理(即卸载)装载点。

09-26 16:54