如何在机器自动关机之前运行命令?
答案1
cron
不是用于此目的的工具。您需要设置一个upstart
在关机期间执行的作业,最好声明依赖关系,以便它在它需要的任何服务关闭之前运行。 man 5 init
有关如何正确定义启动或关闭任务的详细信息;如果没有更多信息,我无法提供更多帮助,因为这取决于您要做什么以及它upstart
依赖的其他作业。
答案2
如何将脚本放入正确的运行级别?我认为运行级别 6 是关机,然后要播放的目录是
/etc/rc6.d/
答案3
尝试这个,用无意义的值替换$HOME
和,并将其保存为具有权限。$PROFILE
~/.init
644
在你做任何事情之前,确保有这样一行
firefox /home/your_name/.mozilla/firefox/your_profile.default tmpfs size=128M,noauto,user,exec,uid=1000,gid=100 0 0
在 中/etc/fstab
,mount 选项noauto
阻止 tmpfs 自动挂载,您可以将其更改为auto
以符合您的偏好。我将其保留在那里以保持整个 upstart 作业的完整性。
description "automatic firefox profile ram caching"
start on started mountall
stop on stopping mountall
env HOME="/home/your_name"
env PROFILE="your_profile.default"
script
if test -z "$(mount | grep -F "${HOME}/.mozilla/firefox/${PROFILE}" )"
then
mount "${HOME}/.mozilla/firefox/${PROFILE}"
fi
end script
post-start script
cd "${HOME}/.mozilla/firefox"
if test -f packed.tar
then
tar xpf packed.tar
echo "$(date): firefox profile unpacked to ram" >> unpack.log
else
tar xpf packed.tar.old
echo "$(date): backup profile unpacked to ram" >> unpack.log
fi
touch "${PROFILE}/.unpacked"
end script
pre-stop script
cd "${HOME}/.mozilla/firefox"
if test -f "${PROFILE}/.unpacked"
then
tar --exclude '.unpacked' -cpf packed.tmp.tar "$PROFILE"
mv packed.tar packed.tar.old
mv packed.tmp.tar packed.tar
rm "$PFORILE/.unpacked"
echo "$(date) firefox profile packed from ram" >> pack.log
else
echo ".unpacked is missing. pack current session data to newfile"
tar -cpf packed-$(date +%Y%m%d%H%M).tar "$PROFILE"
fi
end script
答案4
作为 funicorn 答案的简化版本..一个 upstart 工作,可以在 /etc/init/foo.conf 中或作为 ~/.init/foo.conf :
start on starting rc RUNLEVEL=6
task
exec myscript
这将运行,并阻止整个关闭,直到“myscript”退出。
这就是您所需要的。请注意,用户作业 (~/.init/foo.conf) 是一个非常新的功能,在我的 12.04 系统上,ecryptfs /home 不起作用,因此您可能只需将作业放入 /etc/init 中。