powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / (linux) Предотвращение повторного запуска скрипта
16 сообщений из 16, страница 1 из 1
(linux) Предотвращение повторного запуска скрипта
    #36080099
0xff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересует, как это реализовать в shell или perl-скрипте.

Хотелось бы что-нибудь типа
-- Попробовать установить семафор с уникальным именем
-- Если не удалось установить, значит скрипт уже кем-то запущен.
выругаться и аварийно завершить скрипт.

p.s. скрипт может выполняться разными пользователями.
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080285
Sleeping Daemon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0xffИнтересует, как это реализовать в shell или perl-скрипте.

Хотелось бы что-нибудь типа
-- Попробовать установить семафор с уникальным именем
-- Если не удалось установить, значит скрипт уже кем-то запущен.
выругаться и аварийно завершить скрипт.

p.s. скрипт может выполняться разными пользователями.
Например в скрипте, в начале проверять некий файл. Если есть - exit, если нет - создать файл и выполнять скрипт. В конце удалить этот файл.
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080337
0xff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sleeping Daemon0xffИнтересует, как это реализовать в shell или perl-скрипте.

Хотелось бы что-нибудь типа
-- Попробовать установить семафор с уникальным именем
-- Если не удалось установить, значит скрипт уже кем-то запущен.
выругаться и аварийно завершить скрипт.

p.s. скрипт может выполняться разными пользователями.
Например в скрипте, в начале проверять некий файл. Если есть - exit, если нет - создать файл и выполнять скрипт. В конце удалить этот файл.

Не подходит, ненадежно:

-- скрипт запускается, создает файл-семафор и начинает работать
-- скрипт убивается через kill / выдергивается шнур из розетки (утрирую, конечно ;)
-- при следующем запуске скрипт увидит файл-семафор и подумает, что предыдущий экземпляр работает, хотя это не так.
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080396
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при запуске в файл кладется pid, проверяем есть такой pid (ps-м или kill -0)

в линуксе удобно checkproc startproc
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080404
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в шел скрипте пид вычисляется так:
echo $$ > /tmp/script_name.pid
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080418
0xff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Дениспри запуске в файл кладется pid, проверяем есть такой pid (ps-м или kill -0)

в линуксе удобно checkproc startproc

скрипт может выполняться под разными пользователями.

есть ли гарантия, что по заданному pid можно определить, что процесс запущен, даже если он запущен из-под другого пользователя?
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080428
0xff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денисв шел скрипте пид вычисляется так:
echo $$ > /tmp/script_name.pid
спасибо, как раз хотел погуглить по этому вопросу ;)
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080445
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0xffЖуравлев Дениспри запуске в файл кладется pid, проверяем есть такой pid (ps-м или kill -0)

в линуксе удобно checkproc startproc

скрипт может выполняться под разными пользователями.

есть ли гарантия, что по заданному pid можно определить, что процесс запущен, даже если он запущен из-под другого пользователя?pid это номер процесса, без разницы от кого он запущен.
А вообще ps доступен?
Может можно и без файлика обойтись
просто искать ps -ef|grep nameofsh|grep -v $$|wc -l
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080667
Kochmin_Alexandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис wrote:

> просто искать ps -ef|grep nameofsh|grep -v $$|wc -l

и покажет ли ps процессы другого юзера не под рутом?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080738
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kochmin_Alexandr
Журавлев Денис wrote:

> просто искать ps -ef|grep nameofsh|grep -v $$|wc -l

и покажет ли ps процессы другого юзера не под рутом?
В нормальной системе покажет. -ef или aux показывают вообще все процессы, даже init
В ненормальной системе возможно что вообще ничего не покажет. А если 500 тыс. процессов то ps будет работать час.
Поэтому универсальный способ это: pid в файлик, kill -0 `cat файлик`
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080892
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
# man lockfile
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36080929
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисПоэтому универсальный способ это: pid в файлик, kill -0 `cat файлик`
shell'овский kill вернёт одинаковый результат, если нет процесса и если нет прав доступа
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36081051
0xff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисА вообще ps доступен?
Может можно и без файлика обойтись
просто искать ps -ef|grep nameofsh|grep -v $$|wc -l
Да, ps доступен.

Но способ не особенно понравился из-за

Журавлев ДенисА если 500 тыс. процессов то ps будет работать час .

Час не час, но если есть возможность обойтись без потенциальных задержек (pid в файл+kill), наверное, так и стоит делать.

Денис, спасибо за информацию!


Relic Hunter
Код: plaintext
# man lockfile

Просто супер, спасибо!
lockfile и буду использовать, есть в системе + понравилось возможность легко поставить retries
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36081055
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЁшЖуравлев ДенисПоэтому универсальный способ это: pid в файлик, kill -0 `cat файлик`
shell'овский kill вернёт одинаковый результат, если нет процесса и если нет прав доступа
нифига
либо нет такого процесса
либо нет разрешения
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36081902
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисЁшЖуравлев ДенисПоэтому универсальный способ это: pid в файлик, kill -0 `cat файлик`
shell'овский kill вернёт одинаковый результат, если нет процесса и если нет прав доступа
нифига
либо нет такого процесса
либо нет разрешения
Код: plaintext
1.
2.
3.
4.
5.
6.
$ kill -0 1; echo $?
bash: kill: (1) - Операция не позволяется
1
$ kill -0 12345; echo $?
bash: kill: (12345) - Нет такого процесса
1
и там и там результат = 1
...
Рейтинг: 0 / 0
(linux) Предотвращение повторного запуска скрипта
    #36082098
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЁшЖуравлев ДенисЁшЖуравлев ДенисПоэтому универсальный способ это: pid в файлик, kill -0 `cat файлик`
shell'овский kill вернёт одинаковый результат, если нет процесса и если нет прав доступа
нифига
либо нет такого процесса
либо нет разрешения
Код: plaintext
1.
2.
3.
4.
5.
6.
$ kill -0 1; echo $?
bash: kill: (1) - Операция не позволяется
1
$ kill -0 12345; echo $?
bash: kill: (12345) - Нет такого процесса
1
и там и там результат = 1
я понимаю что код возврата один тот же.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / (linux) Предотвращение повторного запуска скрипта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]