Как запустить команду до того, как машина автоматически отключится?

Вот довольно приличное изложение исторической привязки: https://wiki.ubuntu.com/Bugs/HowToFix

1
задан 17 August 2017 в 20:21

3 ответа

cron не является инструментом для этого. Вам нужно настроить задание upstart, которое выполняется во время выключения, предпочтительно объявляя зависимость, чтобы она выполнялась перед любыми службами, которые она требует отключения. man 5 init для получения подробных сведений о том, как правильно определить задачу запуска или завершения работы; Я не могу помочь дальше этого без дополнительной информации, так как это зависит от того, что вы пытаетесь сделать, и от каких других upstart заданий это зависит от.

5
ответ дан 25 May 2018 в 20:02
  • 1
    Мой вопрос: как запустить команду автоматически до выключения компьютера? – waterloo2005 29 June 2011 в 22:48
  • 2
    Я монтирую файл firefox * .profile с tmpfs в ram при запуске. Когда я завершаю машину, я хочу, чтобы файл профиля был автоматически загружен в файл, чтобы сохранить содержимое. – waterloo2005 29 June 2011 в 22:52
  • 3
    Таким образом, как говорит вам man 5 init, существует несколько способов определить для этого задание upstart: это может быть script срабатывание start on shutdown или более точно start on stopping mountall. Или вы могли бы start on started mountall и stop on stopping mountall и использовать pre-start для создания, mount и заполнить ramdisk и post-stop для сохранения и umount. – geekosaur 29 June 2011 в 23:19

Попробуйте это, заменив $HOME и $PROFILE на vapid-значения и сохраните их до ~/.init с разрешения 644.

Прежде чем что-либо сделать, убедитесь, что в /etc/fstab имеется строка типа

firefox /home/your_name/.mozilla/firefox/your_profile.default tmpfs size=128M,noauto,user,exec,uid=1000,gid=100 0 0

, где опция mount 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
1
ответ дан 25 May 2018 в 20:02

В качестве упрощенной версии ответа funicorn .. upstart job, либо в /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.

1
ответ дан 25 May 2018 в 20:02

Другие вопросы по тегам:

Похожие вопросы: