URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9550
[ Назад ]

Исходное сообщение
"Интересная задача, можно ли в скрипте отстегнуться от ФС"

Отправлено mr_tee , 01-Окт-12 16:55 
Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.

Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
Когда он запущен, то ФС где он находится отмонтировать нельзя.
Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС отмонтировать в самом скрипте?

Спасибо.


Содержание

Сообщения в этом обсуждении
"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено Doka , 01-Окт-12 18:34 
> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
> Когда он запущен, то ФС где он находится отмонтировать нельзя.
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?
> Спасибо.

а положить скрипт в корневую ФС?


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено mr_tee , 02-Окт-12 08:02 
>> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
>> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
>> Когда он запущен, то ФС где он находится отмонтировать нельзя.
>> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
>> отмонтировать в самом скрипте?
>> Спасибо.
> а положить скрипт в корневую ФС?

тогда и задачи не будет))

на самом деле скрипт лежит на nfs, и изменяется централизованно в одном месте, nfs подключена на 100500 серверов) хочется, чтобы он запустился, отмонтировал nfs, пошушукал о своем личном, а потом примонтировал nfs


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено Doka , 02-Окт-12 08:36 
>>> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
>>> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
>>> Когда он запущен, то ФС где он находится отмонтировать нельзя.
>>> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
>>> отмонтировать в самом скрипте?
>>> Спасибо.
>> а положить скрипт в корневую ФС?
> тогда и задачи не будет))

железная логика.
а что мешает перед запуском скопировать его?



"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено XAnder , 02-Окт-12 09:01 
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?

Можно попробовать сделать fork, после чего родительский процесс завершить и продолжать работу в дочернем. На Перле у меня в своё время прокатил такой способ (долгоиграющая программа запускалась с флешки, которую после запуска нужно было извлекать), может быть и на Шелле получится.


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено КуКу , 02-Окт-12 09:36 
Можно попробывать в скрипте при запуске монтировать tmpfs, туда копировать скрипт и крутить его в оперативке, ну а дальше подгонять под задачу и фантазию:)

"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено Andrey Mitrofanov , 02-Окт-12 15:31 
> Когда он запущен, то ФС где он находится отмонтировать нельзя.
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?

1. Закрыть все файлы, которые он держин на этой FS.
1.1. Включая: сменить _текущую _директорию. `cd /`

Л. См. lsof -p $PID

> Спасибо.

На здоровье.


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено Andrey Mitrofanov , 02-Окт-12 15:36 
> 1.1. Включая: сменить _текущую _директорию. `cd /`

И да, экстремальный случай, если та FS - Ж) корневая, то pivot_root.


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено pavlinux , 25-Окт-12 12:36 
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?

Чтоб отпилить сук на котором сидишь, можно:

Установить пилу с таймером и спрыгнуть. (at; kill -9 $$)
Схватится за другой сук. (cp script.sh /tmp/; cd /tmp; sh /tmp/script.sh)
Взять парашют (umount -f /nfs )

  


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено Аноним , 25-Окт-12 17:25 
> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
> Собственно задача формулируется просто, есть 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


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено Xaionaro , 26-Окт-12 08:27 
> Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.
> Собственно задача формулируется просто, есть bash скрипт, который как-то запускается.
> Когда он запущен, то ФС где он находится отмонтировать нельзя.
> Как внутри скрипта отстегнуться от ФС, где он находится, чтобы эту ФС
> отмонтировать в самом скрипте?
> Спасибо.

Чем не устраивает "umount -l"?


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено a , 27-Окт-12 01:05 
Доброго времени!
Наиболее очевидный способ использовать конвейер (именованный канал).
Вам вероятно, вместо /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/Именованный_канал


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено mr_tee , 02-Ноя-12 11:41 
Всем большое спасибо.

Способ запуска скрипта я не контролирую, так как этот скрипт автоматически запускается при выключении/перезапуске системы.

Сделал через временный файл, вся фишка в последнем амперсанде:

#!/bin/bash

cat >/tmp/${0##*/}<<EOF
#!/bin/bash

counter=5
while [ \$counter -gt 0 ]
do
if umount /config_sync; then
        
        echo Что-то полезное

        mount /config_sync
        break
fi
        sleep 1
        counter=\$(( \$counter - 1 ))
done
EOF

cd /
/bin/bash /tmp/${0##*/} &


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено a , 02-Ноя-12 20:22 
> Способ запуска скрипта я не контролирую, так как этот скрипт автоматически запускается
> при выключении/перезапуске системы.

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" &


"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Отправлено Stac , 03-Ноя-12 20:49 
> Сделал через временный файл, вся фишка в последнем амперсанде:

А там не стоило бы дополнить:
nohup команда 1>/dev/null 2>/dev/null &