Как я могу запустить команду до того, как машина автоматически выключится?
Как насчет того, чтобы поместить скрипт на правильный уровень запуска? Я думаю, что уровень запуска 6 отключен, а затем каталог для воспроизведения
/etc/rc6.d/
Попробуйте это, заменив $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
, где параметр монтирования noauto
предотвращает автоматическое монтирование tmpfs -, которое можно изменить на auto
по вашему усмотрению. Я оставляю его там, чтобы сохранить всю работу выскочки в целостности.
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
В качестве упрощенной версии ответа funicorn.. выскочка, либо в /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..
cron
не является инструментом для этого. Вам необходимо настроить задание upstart
, которое выполняется во время завершения работы, желательно с объявлением зависимости, чтобы оно запускалось до завершения работы любых служб, которые ему требуются. man 5 init
для получения подробной информации о том, как правильно определить задачу запуска или завершения работы; Я не могу помочь без дополнительной информации, так как это зависит от того, что вы пытаетесь сделать и от каких других upstart
заданий это зависит.