LINUX.ORG.RU

как узнать из какой директории запущен скрипт?


0

1

такая ситуация:

запущен апач и есть, допустим, 10 папок с одинаковыми скриптами на питоне, которые апач выполняет как cgi

есть скрипт мониторинга запущенных скриптов

на данных момент он делает

ps axo tid,etime,%cpu,user,command | grep python3

и выводит список запущенных скриптов, каждый из которых называется start.pyw

проблема в том, что неясно из какой папки какая копия запущена
прочитал ман ps, но не нашел там, как можно добавить в выдачу такую информацию

может можно как-то настроить апач, чтобы он дописывал пути, мб в качестве аргументов к процессу, чтобы потом можно было их увидеть?

или есть способ проще?

Ответ на: комментарий от SteveBallmer

это внутри уже запущенного скрипта

а мне надо получить эту информацию в выдаче ps, т.к. скриптов много, у них у всех одинаковые имена, но запущены из разных папок

это надо, чтобы убить скрипт из определенной папки
как это сделать не зная откуда он был запущен апачем?

sergey-novikov ★★★
() автор топика

Напиши скрипт-диспетчер, которому каждый скрипт после запуска и перед завершением будет отправлять свой PID и свой $PWD и флаг запущен/остановлен.

adriano32 ★★★
()
Ответ на: комментарий от sdio

писал наугад, так что мне простительно.
Вот как у меня выглядит (апача нема, извиняйте)

% pgrep -lf python                                                                                                                               
2167 /usr/bin/python /usr/bin/zeitgeist-daemon
2397 /usr/bin/python /usr/share/system-config-printer/applet.py
2429 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon
3328 /usr/bin/python /usr/lib/system-service/system-service-d

zolden ★★★★★
()
Ответ на: комментарий от sdio

А если в скрипте перешли в др. директорию

Не думаю, что ТС настолько злой.

baverman ★★★
()
Ответ на: комментарий от baverman
pgrep -f python3 | xargs --replace=^ sh -c "echo -n ^' '; readlink /proc/^/cwd"

запустил два скрипта - в tmp/ и в tmp/tmp2 команда выдает:

user@localhost www]$ pgrep -f python3 | xargs --replace=^ sh -c «echo -n ^' '; readlink /proc/^/cwd»

1118 /home/user/tmp 1119 /home/user/tmp 1190 /home/user/tmp/tmp2 1191 /home/user/tmp/tmp2

не могу понять как работает вот это: xargs --replace=^ sh -c «echo -n ^' '; readlink /proc/^/cwd»

можете на словах сказать что она вообще делает и откуда берутся полные пути?

sergey-novikov ★★★
() автор топика
Ответ на: комментарий от sergey-novikov

как работает вот это…

xargs для каждого найденного пида запускает команду, заменяя ^ на pid.

Потом можно почитать man 5 proc, в котором объясняется, что такое /proc/pid/cwd. А readlink просто разыменовывает симлинк.

baverman ★★★
()
Ответ на: комментарий от baverman

спасибо за обьяснения, разобрался с тем как это работает

но сейчас функция не хочет получать путь до файла, хотя в консоли все работает

proc = subprocess.Popen('readlink /proc/ИД-ПРОЦЕССА/cwd', shell=True,
stdout=subprocess.PIPE, stdin=subprocess.PIPE)

processes = b''
while True:
	processes += proc.stdout.read(1024)
	if proc.poll() is not None:
		break
	ps = processes.decode('utf-8', 'ignore').split('\n')

разница лишь в том, что скрипт запускает эту команду от имени юзера apache

есть ли универсальный способ получить путь до файла, без особых привелегий? хотя в консоли я его получаю и не от рута

sergey-novikov ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.