Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: BASH. Продолжить выполнение когда файл будет свободен.  (Прочитано 2326 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
Все-таки не хотелось трогать права и делать сколь-нибудь серьезные изменения в системе. В итоге утром пришла такая идея. Если файл пишется значит изменяется размер, значит можно попробовать отследить занятость файла по изменению размера, вот что получилось, требуемый результат получен.

(Нажмите, чтобы показать/скрыть)
Напоминаю, скрипт вызывается 2 раза, потому что отбой при переводе вызывается тоже 2 раза.


ArcFi, спасибо, что помог в решении задачи.

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
lsof /path/to/file

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
.ubuntufan,
внезапно, уже писал, что также не работает как и fuser в данном случае.

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Ещё бы. Ты ведь даже не разобрался от каких пользователей процессы запускаются.

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
.ubuntufan,
Ты давай рабочее решение предложи, а не воняй просто так.


А давайте будет чуточку вежливее....
Sly_tom_cat
« Последнее редактирование: 10 Декабря 2014, 10:17:23 от Sly_tom_cat »

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Смотри выше. Рабочее решение.
Никакой магии нет, процесс не может не получить информацию о соседних процессах выполняющихся от того же юзера.
http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

И на протяжении всей темы ты так и не убедился что процессы выполняются от одиого и того же пользователя, хотя с этого следовало начинать.

А еще можно так:
http://man7.org/linux/man-pages/man7/inotify.7.html
http://www.infoq.com/articles/inotify-linux-file-system-event-monitoring
« Последнее редактирование: 10 Декабря 2014, 15:50:45 от .ubuntufan »

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
Повторю:
root@asterisk-dk:/var/spool/asterisk/monitor# fuser 2014-12-11__09-02-09__221540-990114_402.ogg
/var/spool/asterisk/monitor/2014-12-11__09-02-09__221540-990114_402.ogg: 10264
root@asterisk-dk:/var/spool/asterisk/monitor# lsof 2014-12-11__09-02-09__221540-990114_402.ogg
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
sftp-serv 10264 master    3r   REG 253,17   224308 149217386 2014-12-11__09-02-09__221540-990114_402.ogg
root@asterisk-dk:/var/spool/asterisk/monitor# sudo -iu asterisk fuser 2014-12-11__09-02-09__221540-990114_402.ogg
root@asterisk-dk:/var/spool/asterisk/monitor# sudo -iu asterisk lsof 2014-12-11__09-02-09__221540-990114_402.ogg
root@asterisk-dk:/var/spool/asterisk/monitor#

Ещё раз, ни fuser, ни lsof в данном случае не подходят.
« Последнее редактирование: 11 Декабря 2014, 05:31:15 от thunderamur »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
А почему asterisk? Файл залочен master UID=10264. Вполне возможно, что системными политиками asterisk запрещено смотреть чужие процессы. Надо или настроить политики (или sudoers на крайний случай для lsof), или запускать от root или владельца.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Цитировать
COMMAND
sftp-serv

USER
master

Цитировать
sudo -iu asterisk lsof 2014-12-11__09-02-09__221540-990114_402.ogg

facepalm.jpg


Цитировать
Файл залочен master UID=10264. Вполне возможно, что системными политиками asterisk запрещено смотреть чужие процессы.

Это не UID. Да, запрещено. Не только asterisk, но и вообще всем другим.
« Последнее редактирование: 11 Декабря 2014, 14:50:29 от .ubuntufan »

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
А почему asterisk? Файл залочен master UID=10264. Вполне возможно, что системными политиками asterisk запрещено смотреть чужие процессы. Надо или настроить политики (или sudoers на крайний случай для lsof), или запускать от root или владельца.
Прочти тему, понятно будет почему asterisk.
Владелец файла asterisk, в боевом режиме именно он и занимает файл, при этом скрипт не работал нормально при использовании fuser и lsof.
Ковыряние sudoers лучше чем хак с ls? Каким образом запускать от рут, это же опять к sudoers?

.ubuntufan,
Фейспалм скорее твоим высерам. Ну сколько можно уже, ты можешь предоставить рабочее решение и получить луч респекта. Да я занял файл другой прогой и пользователем, но в боевом режиме, когда файл занят asteriskом ситуация та же, так просто гораздо проще занять файл.
Ещё раз, предложи решение лучше чем ls для данного случая, описанного в 1-м посте, а не вообще. Если не можешь, зачем все это?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Не сердитесь, но насколько я вижу
root@asterisk-dk:/var/spool/asterisk/monitor# lsof 2014-12-11__09-02-09__221540-990114_402.ogg
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
sftp-serv 10264 master    3r   REG 253,17   224308 149217386 2014-12-11__09-02-09__221540-990114_402.ogg
Я бы попробовал запустить скрипт от рута и добавил вывод кто всё-таки "хозяин"
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
Azure,
Хозяин asterisk, я уже писал, файлы им создаются. От рута и fuser и lsof работают штатно. В рабочем режиме от рута запустить нельзя, не ковыряя sudoers и не изменяя SUID.

В общем, в данном случае решения лучше, чем ls, не найдено. Всем спасибо, закрыто.

 

Страница сгенерирована за 0.043 секунд. Запросов: 25.