S25mdadm включает RAID, контролирующий только. Сами НАБЕГИ включены, и связанные файловые системы являются fsck'd и смонтированный намного ранее как часть общей системы init процедура, которая предшествует выполнению сценариев запуска в rcN.d.
Когда bash(1)
выполняется как оболочка входа в систему (т.е. когда пользователь входит в систему), она работает /etc/profile
, ~/.bash_profile
, ~/.bash_login
, и ~/.profile
если не вызвано с --no-profile
. Запуск Вашего сценария оттуда должен добиться цели.
Ваш сценарий должен проверить, что существует только один экземпляр. Попробуйте что-то вроде этого:
#!/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
таким образом - пробуют, если вообще возможный думать о другом способе сделать независимо от того, что Вы хотите сделать.
inotifywait
в while true
для выполнения другого сценария каждый раз, файл изменяется.
– jsj
04.03.2013, 09:38
Можно добавить еще одно условие как указано ниже:
включить .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
в последнем.
Вы можете запустить скрипт и можете получить журналы от ниже команды:
nohup /path/to/your/script.sh > /dev/null 2>&1 &
Это также даст Вам вывод.