Лучший способ сделать остановку?

Добавьте это к нижней части вашего ~/.bashrc

split_pwd() {
        # Only show ellipses for directory trees -gt 3
        # Otherwise use the default pwd as the current \w replacement
        if [ $(pwd | grep -o '/' | wc -l) -gt 3 ]; then
                pwd | cut -d'/' -f1-3 | xargs -I{} echo {}"/../${PWD##*/}"
        else
                pwd
        fi
}


export PS1="\$(split_pwd) > "

. По общему признанию, это, возможно, было бы более чистым, но я хотел получить трещину.

Ожидаемый результат для более трех слоев.

/home/chris/../Node Projects >

Ожидаемый выход для каталогов с рабочего стола и обратно.

/home/chris/Desktop > 
/home/chris >  
/home
1
задан 23 February 2015 в 18:37

2 ответа

Чтобы остановить остановку при продолжении работы, вы захотите использовать это:

stop on starting rc RUNLEVEL=[016]

Это будет работать, потому что первое, что происходит при вводе «shutdown», - это tunlevel 0 испускается. rc запускается на уровне запуска, а переход из остановленного -> запуска будет полностью блокироваться до тех пор, пока все задания, которые также должны изменить состояние, не завершили это состояние.

Вы хотите, чтобы ваш процесс быстро реагировал на SIGTERM , Если он не ответит в течение 5 секунд, выскочка отправит его SIGKILL. Вы можете поднять это с помощью «kill timeout X».

1 там, кстати, немного сложно, вам нужно убедиться, что ваш запуск включает в себя что-то, начинающееся с уровня запуска [2345] в этот момент, так что пользователь, опустившийся для обслуживания одного пользователя, снова начинает работу. К счастью, большая часть работы пошла на то, чтобы сделать это обычным началом на

start on runlevel [2345]

. Также в некоторых случаях вам нужно что-то продолжать, пока сеть не будет сбита (например, dbus / менеджер). Для этого вы хотите

stop on deconfiguring-networking

Это событие, выпущенное позже при завершении работы, которое также будет заблокировано до тех пор, пока все используемые им работы полностью не завершит свои переходы в состоянии.

2
ответ дан 25 May 2018 в 22:33
  • 1
    Вы имели в виду start on starting .... Не имеет смысла, чтобы мой остановка осталась на месте. start on starting rc RUNLEVEL=[016] будет иметь больший смысл. И, возможно, task бросили туда, чтобы убедиться, что он может закончить, прежде чем запускать другие вещи. – Tejay Cardon 14 April 2015 в 22:53

Geekosaur, большое спасибо за вашу помощь.

Тем временем я пробовал метод start on runlevel [016], но он не работал, и я думаю, что понимаю, почему:

Задание началось действительно, но процесс завершения работы не был заблокирован, пока задача задания не была завершена. Теперь я совершенно уверен, что события starting и stopping являются единственными событиями, которые могут использоваться в определении задания для блокировки других заданий, и я думаю, что это то, что нам посоветовали руководства Upstart. Поэтому использование события runlevel никогда не приведет к блокировке других заданий или к завершению процесса; Таким образом, это бесполезно для моей цели.

Вместо этого у меня, кажется, есть две возможности:

Следуя одному из ваших предложений, найдите все задания, которые нужны будущим приложениям, и включите все они в стартовом событии для скрипта:
start on stopping job1 or stopping job2 or ...
Это так много работы, что я серьезно подумываю о том, чтобы сбросить список заданий и запустить его через sed, чтобы автоматически создать начальную строфу для моей работы, которая включает в себя все задания, которые обычно работают в системе. Преимущество состояло бы в том, что соответствующие приложения будут закрыты, даже если кто-то остановит одно из предварительных условий вручную (в отличие от остановки их изменения / завершения работы / перезагрузки). Найдите одно задание, которое сначала будет остановлено при перезагрузке / выключении системы (давайте назовем это задание «FirstJob») и используем это задание в строфе вроде:
start on stopping FirstJob
. Основными недостатками могут быть то, что я не знаю, такая работа существует вообще, и если эта работа действительно зависит от всех других заданий, от которых фактически зависит реальное приложение («в зависимости от другой работы» в этом случае означает «будет полностью остановлено, пока другая работа не начнет останавливаться»).

Я не уверен, какая из двух возможностей лучше ...

0
ответ дан 25 May 2018 в 22:33
  • 1
    Я буду делать скрипт sed прямо сейчас, если бы я был на вашем месте. – geekosaur 17 March 2011 в 03:16

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

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