#!/bin/bash
value=$(</var/www/sym_monitor/man.txt)


if [ "$value" == "true" ]; then

     ps -ef|grep sym |grep -v grep |awk '{ print $2 }'|sudo  xargs kill -9;


(cd /var/www/symmetric-ds-3.1.6/bin;sudo ./sym --port 8082 --server);

fi

Вторая команда в скобках не выполняет никакой идеи, почему это происходит?

1 ответ1

0

Вы должны использовать абсолютный путь с sudo по соображениям безопасности:

( sudo /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server );

Проверьте вывод команды sudo -l для подтверждения. Со страницы руководства sudoers (1.7.x):

Cmnd_List - это список из одного или нескольких имен команд, каталогов и других псевдонимов. Имя commandname - это полное filename которое может включать подстановочные знаки в стиле оболочки (см. Раздел «Подстановочные знаки» ниже).

sudo xargs работает, потому что xargs (почти наверняка) находится в надежном пути (/usr/bin).

Также проверьте pgrep и pkill , это избавит вас от ненужной акробатики ps pipe.

У вас есть вероятность утечки ресурсов и другого нежелательного поведения при безусловном kill -9 , см. Https://unix.stackexchange.com/questions/8916/why-not-kill-9-a-process .

Обновление, которое вы добавили, вы запускаете это через crontab пользователя root - root не нуждается в использовании sudo , и в некоторых случаях root может не запускать sudo , проверьте, что sudo -l говорит, когда вы являетесь пользователем root. Если вы хотите иметь возможность запускать программу (которая не переключает свой собственный uid) в качестве определенного идентификатора пользователя, то обычно используется su - username -c "command" .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .