По-видимому, Ваше намерение с этими строками состоит в том, чтобы не соответствовать grep
команда в выводе ps
:
PID=`ps faux | grep libt | awk 'NR==2{print $2}'`
STATUS=`ps faux | grep libt | awk 'NR==2{print $1}'`
Вы не можете гарантировать, что вторая строка будет той, которую Вы хотите. Необходимо устранить grep
при помощи общего приема:
ps faux | grep [l]ibt
путем включения символа в квадратные скобки, grep
ищет "libt", но не литерал" [l] ibt", потому что он интерпретирует символы в скобках как список.
Необходимо использовать $()
для замены команды вместо обратных галочек. Они более читаемы и легче сделать вложение.
Можно также получить и имя пользователя и PID с помощью одного вызова для ps
при сокращении возможностей состояния состязания, но Вам действительно не нужно имя пользователя, так как Вы уже знаете это. Необходимо только должны быть знать, работает ли процесс или нет.
Однако существуют все еще возможности для ложных положительных сторон. Если Вы можете, необходимо использовать pgrep
и pkill
.
#!/bin/sh
PID=$(pgrep -U ec2-user libt 2>/dev/null)
if [ $? = 0 ]
then
kill $PID
echo "libt was killed"
else
echo "libt already killed"
fi
sleep 5
/home/ec2-user/libt/libt
Посмотрите управление процессами для получения дополнительной информации.
system ("whoami");
чтобы получить имя пользователя веб-сервера, в этом примере я использую www-data
.
Отредактируйте файл sudoers и добавьте следующее. Где пользователь
- это имя пользователя, под которым он будет работать.
www-data ALL = (user) NOPASSWD: / path / to / program / или / script
Затем используйте следующую команду в PHP .
system ("sudo -u user / path / to / program / or / script");
Несмотря на то, что эта должность давно назрела, я бы хотел ее порекомендовать: запустить команду 'whoami' с языка side-server-scripting, выполняющую команды строк(php), а затем изменить файл sudoers с конкретным пользователем, потому что в некоторых случаях www-data, а в других - daemon .....
.