Запустить http-сервер python, который может быть остановлен кем угодно

Чтобы включить все записи "Dev_[digits]":

awk 'BEGIN {RS=" "} /Dev_[0-9]+/ {print}' inputfile

Или, если вы хотите включить только эти записи "Dev":

awk 'BEGIN {RS=" "} /Dev_(795|796|797)/ {print}' inputfile
1
01.04.2017, 00:39
1 ответ

Если сервер работает от имени выделенного пользователя, вы можете сохранить копию /bin/kill с setuid для этого пользователя. Это работает, только если пользователь не используется ни для чего другого, потому что двоичный файл setuid kill позволяет послать сигнал любому процессу, запущенному от имени этого пользователя. Обертка setuid, которая проверяет PID перед убийством, на самом деле невыполнима: нет способа исследовать запущенные программы без условий гонки.

Другой способ решения этой проблемы заключается в том, чтобы иметь программу мониторинга, которая работает под тем же пользователем, что и сервер, и готова убить сервер, с условием запуска, которое не привязано к учетной записи пользователя. Программа мониторинга должна быть родителем сервера, чтобы иметь возможность надежно убить его без риска возникновения состояния гонки. Триггером может быть что-то вроде записи в трубу. Доказательство концепции:

#!/bin/sh
SimpleHTTPServer &
server_pid=$!
read </var/lib/myserver/kill
kill "$server_pid"

Чтобы настроить это:

mkdir /var/run/myserver
mkfifo -m 660 /var/run/myserver/kill
chown server-user /var/run/myserver/kill
chgrp server-killers /var/run/myserver/kill

Чтобы убить сервер, любой пользователь в группе server-killers может выполнить echo >/var/run/myserver/kill.

0
28.01.2020, 00:58

Теги

Похожие вопросы