Куда поместить фоновый сценарий

S25mdadm включает RAID, контролирующий только. Сами НАБЕГИ включены, и связанные файловые системы являются fsck'd и смонтированный намного ранее как часть общей системы init процедура, которая предшествует выполнению сценариев запуска в rcN.d.

1
04.03.2013, 05:27
4 ответа

Когда bash(1) выполняется как оболочка входа в систему (т.е. когда пользователь входит в систему), она работает /etc/profile, ~/.bash_profile, ~/.bash_login, и ~/.profile если не вызвано с --no-profile. Запуск Вашего сценария оттуда должен добиться цели.

1
27.01.2020, 23:17
  • 1
    Это - правильный подход. К сожалению, некоторые менеджеры по X-окну не выполняют оболочку входа в систему: они просто дают Вам X сессий, и Вы запускаете обычный xterms сами. Таким образом, это может или не может работать на Вашу установку. –  alexis 04.03.2013, 19:48

Ваш сценарий должен проверить, что существует только один экземпляр. Попробуйте что-то вроде этого:

#!/bin/bash

mkdir ~/.lock_script || exit
trap "rmdir ~/.lock_script" EXIT

while true
do
    # Do whatever the script does continuously, here....
    #
done

trap команда заботится о чистке на выходе, поэтому даже если сценарий будет уничтожен или завершен, то это вымоется. Никакой процесс не может поймать (захватывают) сигнал ТЕРМИНА (Сигнал 9) поэтому если Вы kill -9 сценарий, это не вымоется после себя.

mkdir является атомарной операцией, что касается ядра. Если mkdir не успешно выполняется (Например, если каталог уже существует), затем, команда возвращает ошибку, которая заставляет вторую половину команды работать - например, выход.

Можно считать команду как "mkdir или иначе выйти" - она лучше объяснена здесь: http://initialprogramload.blogspot.com/2008/11/single-script-instance.html

Я также предложил бы, чтобы Вы не использовали while true таким образом - пробуют, если вообще возможный думать о другом способе сделать независимо от того, что Вы хотите сделать.

3
27.01.2020, 23:17
  • 1
    я использую inotifywait в while true для выполнения другого сценария каждый раз, файл изменяется. –  jsj 04.03.2013, 09:38
  • 2
    @trideceth12 Вы попробовали решение, которое я отправил? –  Rahul Patil 04.03.2013, 10:46
  • 3
    я нашел mkdir + trap довольно полезные предложения, +1. –  zenzelezz 04.03.2013, 11:46

Можно добавить еще одно условие как указано ниже:

включить .bashrc

export my_script_pid=myscript.${USER}
[[ ! -f $my_script_pid ]] && { touch $my_script_pid; echo run-script; } || echo "script already running"

затем в Вашем сценарии добавляют rm $my_script_pid в последнем.

1
27.01.2020, 23:17
  • 1
    +1 Хорошая работа вокруг решения. Но должен быть, что-то в *отклоняет для запущения программы однажды на вход в систему. –  mtk 04.03.2013, 09:30

Вы можете запустить скрипт и можете получить журналы от ниже команды:

nohup /path/to/your/script.sh > /dev/null 2>&1 &

Это также даст Вам вывод.

0
27.01.2020, 23:17
  • 1
    эй Вы отправляете вывод в /dev/null затем, как даст вывод?? –  Rahul Patil 04.03.2013, 09:19
  • 2
    OP не хочет это, читайте, вопрос снова затем отвечают тщательно –  Rahul Patil 04.03.2013, 09:21

Теги

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