Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
Когда он запущен, то ФС где он находится отмонтировать нельзя.
Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС отмонтировать в самом скрипте?Спасибо.
> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
> Когда он запущен, то ФС где он находится отмонтировать нельзя.
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?
> Спасибо.а положить скрипт в корневую ФС?
>> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
>> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
>> Когда он запущен, то ФС где он находится отмонтировать нельзя.
>> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
>> отмонтировать в самом скрипте?
>> Спасибо.
> а положить скрипт в корневую ФС?тогда и задачи не будет))
на самом деле скрипт лежит на nfs, и изменяется централизованно в одном месте, nfs подключена на 100500 серверов) хочется, чтобы он запустился, отмонтировал nfs, пошушукал о своем личном, а потом примонтировал nfs
>>> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
>>> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
>>> Когда он запущен, то ФС где он находится отмонтировать нельзя.
>>> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
>>> отмонтировать в самом скрипте?
>>> Спасибо.
>> а положить скрипт в корневую ФС?
> тогда и задачи не будет))железная логика.
а что мешает перед запуском скопировать его?
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?Можно попробовать сделать fork, после чего родительский процесс завершить и продолжать работу в дочернем. На Перле у меня в своё время прокатил такой способ (долгоиграющая программа запускалась с флешки, которую после запуска нужно было извлекать), может быть и на Шелле получится.
Можно попробывать в скрипте при запуске монтировать tmpfs, туда копировать скрипт и крутить его в оперативке, ну а дальше подгонять под задачу и фантазию:)
> Когда он запущен, то ФС где он находится отмонтировать нельзя.
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?1. Закрыть все файлы, которые он держин на этой FS.
1.1. Включая: сменить _текущую _директорию. `cd /`Л. См. lsof -p $PID
> Спасибо.
На здоровье.
> 1.1. Включая: сменить _текущую _директорию. `cd /`И да, экстремальный случай, если та FS - Ж) корневая, то pivot_root.
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?Чтоб отпилить сук на котором сидишь, можно:
Установить пилу с таймером и спрыгнуть. (at; kill -9 $$)
Схватится за другой сук. (cp script.sh /tmp/; cd /tmp; sh /tmp/script.sh)
Взять парашют (umount -f /nfs )
> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
> Когда он запущен, то ФС где он находится отмонтировать нельзя.
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?
> Спасибо.p daemon - turns other processes into daemons
* sys-apps/daemonize
Available versions: 1.6
Homepage: http://bmc.github.com/daemonize/
Description: Runs a command as an Unix daemon
> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
> Когда он запущен, то ФС где он находится отмонтировать нельзя.
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?
> Спасибо.Чем не устраивает "umount -l"?
Доброго времени!
Наиболее очевидный способ использовать конвейер (именованный канал).
Вам вероятно, вместо /bin/sh нужно будет использовать /bin/bash и исправить «как-то запускается» должным образом.# mkdir -v /mnt/tmpfs/
mkdir: created directory `/mnt/tmpfs'
# mount -t tmpfs -o size=1M tmpfs /mnt/tmpfs
$ mount | grep /mnt/tmpfs
tmpfs on /mnt/tmpfs type tmpfs (rw,size=1M)
$ cat >/mnt/tmpfs/script.sh<<EOF
#!/bin/sh
while [ "$VAR" != "0" ]; do
sleep 5;
echo working...;
date;
done
EOF
$ chmod +x /mnt/tmpfs/script.sh
$ /mnt/tmpfs/script.sh
working...
Sat Oct 27 00:00:00 YEKT 2012
working...
$ ps -C script.sh
PID TTY TIME CMD
3561 pts/3 00:00:00 script.sh
# umount /mnt/tmpfs
umount: /mnt/tmpfs: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
$ kill 3561
$ cat /mnt/tmpfs/script.sh | /bin/sh
working...
Sat Oct 27 00:00:00 YEKT 2012
working...
$ ps -C script.sh
PID TTY TIME CMD
# umount /mnt/tmpfs
$ mount | grep /mnt/tmpfsВсего наилучшего!
http://ru.wikipedia.org/wiki/Конвейер_(UNIX)
http://ru.wikipedia.org/wiki/Именованный_канал
Всем большое спасибо.Способ запуска скрипта я не контролирую, так как этот скрипт автоматически запускается при выключении/перезапуске системы.
Сделал через временный файл, вся фишка в последнем амперсанде:
#!/bin/bash
cat >/tmp/${0##*/}<<EOF
#!/bin/bashcounter=5
while [ \$counter -gt 0 ]
do
if umount /config_sync; then
echo Что-то полезноеmount /config_sync
break
fi
sleep 1
counter=\$(( \$counter - 1 ))
done
EOFcd /
/bin/bash /tmp/${0##*/} &
> Способ запуска скрипта я не контролирую, так как этот скрипт автоматически запускается
> при выключении/перезапуске системы.cat /mnt/tmpfs/script.sh
#!/bin/bash
/bin/bash -c "
counter=5
while [ \$counter -gt 0 ]
do
if umount /config_sync; then
echo Что-то полезноеmount /config_sync
break
fi
sleep 1
counter=\$(( \$counter - 1 ))
done" &
> Сделал через временный файл, вся фишка в последнем амперсанде:А там не стоило бы дополнить:
nohup команда 1>/dev/null 2>/dev/null &