我有一个非常简单的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”)死亡,我添加了一个检查来清理(即卸载)装载点。