The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Интересная задача, можно ли в скрипте отстегнуться от ФС"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Интересная задача, можно ли в скрипте отстегнуться от ФС"  +/
Сообщение от mr_tee (ok) on 01-Окт-12, 16:55 
Помогите пожалуйста разобраться, думаю что-то подобное должно использоваться при демонизации.

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

Спасибо.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Интересная задача, можно ли в скрипте отстегнуться от ФС"  +/
Сообщение от КуКу (ok) on 02-Окт-12, 09:36 
Можно попробывать в скрипте при запуске монтировать tmpfs, туда копировать скрипт и крутить его в оперативке, ну а дальше подгонять под задачу и фантазию:)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Л. См. lsof -p $PID

> Спасибо.

На здоровье.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

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

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

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

  

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Интересная задача, можно ли в скрипте отстегнуться от ФС"  +/
Сообщение от Аноним (??) on 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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "Интересная задача, можно ли в скрипте отстегнуться от ФС"  +1 +/
Сообщение от a (??) on 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/Именованный_канал

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Интересная задача, можно ли в скрипте отстегнуться от ФС"  +/
Сообщение от mr_tee (ok) on 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##*/} &

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

13. "Интересная задача, можно ли в скрипте отстегнуться от ФС"  +1 +/
Сообщение от a (??) on 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" &

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру