Используя экран для контроля неинтерактивных сценариев (или некоторое другое решение)

Это не может быть сделано путем, Вы хотите. Это просто не прокладывает себе путь. ACLs (Списки управления доступом) хранятся на каждом файле и папке. AD не имеет подсказки, каким папкам и файлам (и серверы) группу присвоили.

То, что можно сделать однако, является использованием инструмент AccessEnum от Microsofts Sysinternals. Можно выполнить это на файловом сервере, и он скажет Вам, у кого/какого есть доступ к каждой папке. Можно затем экспортировать это в CSV для анализа в Excel.

AccessEnum Screenshot
(источник: microsoft.com)

1
задан 8 November 2010 в 20:17
5 ответов

Я хотел бы предложить использовать "nohup" - это произведет stdout в nohup.out. Вы можете bg сценарий с nohup и безопасно выходить из системы, и он продолжит работать. Проверьте человека nohup для получения дополнительной информации.

Типичное использование является #> nohup/usr/local/bin/myscript.sh и

Это запустит скрипт в bg и не потребует, чтобы Вы для пребывания вошли в систему. nohup.out будет в текущем рабочем каталоге, когда он выполняется, или $HOME/nohup.out, если перманент не позволяет его. Можно затем проверить содержание nohup.out для любых проблем, которые необходимо решить и иметь дело с ними соответственно.

Теперь, для обращения к интерактивности можно выполнить экран использования сценария и nohup, этот путь, можно возвратить процесс в передний план, если это подвесило ожидание на входе.

Надеюсь, это поможет

0
ответ дан 3 December 2019 в 22:22
  • 1
    Спасибо за ответ. Это - хорошая мысль, но я не думаю, что это будет работать на мой определенный сценарий (извините, если вопрос был неясен). Сценарий выполняет команды как ssh user@address 'ls -al', никакой скрипт на самом деле не запущен на целевых машинах. Я хочу, чтобы те удаленные команды были выполнены на экранной сессии так, чтобы как администратор, я мог ssh к целевой машине, присоединить к экранной сессии и следить за командами, поскольку они выполняются сценарием. Я не могу сделать чего-то как ssh -t user@address 'screen -S scriptsession' потому что мой сценарий не может взаимодействовать с экранной программой –  Michael 8 November 2010 в 22:41
  • 2
    , с которой я мог взаимодействовать с экранной программой, Ожидают, но я не думаю, что это получило бы меня вывод, в котором я нуждаюсь. –  Michael 8 November 2010 в 22:46

Необходимо посмотреть на Матрицу. Это делает, что Вы описываете Вас, ищут. Необходимо будет сделать некоторые сценарии выхода Python. Вы сможете запустить свои скрипты. Вы могли бы найти более эффективным выполнить команду от Матрицы. Вы будете видеть то, что я имею в виду; выполните учебное руководство. http://docs.fabfile.org/0.9.2/

0
ответ дан 3 December 2019 в 22:22

Если Вы хотите использовать экран, Вы могли бы попробовать что-то вроде этого:

ssh user@address screen -d -m <command>

-d -m комбинация аргументов заставляет экран запустить новую сессию, но не присоединяет к нему.

Я использую вариант этой команды для выполнения "демонов", которые не делают daemonize (как Minecraft) на запуске, и это работает приятно. Я могу соединиться с screen сессия позже и видит полный вывод и дает команды сервера как нормальный. Ниже вариант сценария запуска, который выполняет экранную сессию как кого-то другого, чем корень (для/etc/rc.local):

sudo -u <someuser> -i screen -d -m <command>
0
ответ дан 3 December 2019 в 22:22

Я использую php для сценария оболочки для управления моим сервером Minecraft. Я использую журнал сервера для получения моих ответов. Вот код, который я использую для списка, кто онлайн. Я использую tail чтобы получить последние несколько строк и проанализировать их в течение времени для проверки, ответ после, когда я отправил команду.

#!/usr/bin/php
<?php
function send_cmd( $command )
{
        exec('screen -S minecraft -X stuff "`printf "\\r' . $command . '\\r"`"');
}

function who()
{
        if (!is_running())
        {
                echo 'Server is not running.' . CRLF;
                return 4;
        }

        // Get the current time and send the command
        $before = time() - 1;
        send_cmd('list');

        // Wait for the server to provide a response
        while(time() < $before + 5) {
                sleep(0.25);
                $result = exec('tail ' . __DIR__ . '/server.log | grep "\[INFO\] Connected players"');
                $stamp = strtotime(substr($result, 0, 19));
                if ($before <= $stamp)
                        break;
                unset($result);
        }

        if (isset($result))
        {
                echo $result . CRLF;
                echo 'Server responded in ' . ($stamp - $before) . ' seconds.' . CRLF;
                return 0;
        }
        else
        {
                echo 'Server did not respond.' . CRLF;
                return 4;
        }
}
1
ответ дан 3 December 2019 в 22:22

Большое человеческое взаимодействие.. Я предложил бы:

  1. Разверните Check_MK и настройте его контроль журнала
  2. Передайте вывод сценария по каналу к файлам журнала и имейте монитор Check_MK для ошибок

В этом сценарии человек предупрежден только, когда что-то идет не так, как надо. Они получают шанс рассмотреть сообщение журнала через веб-интерфейс, подтвердить их так, чтобы другие люди в команде знали, что вещи обрабатываются и решают, когда принять меры на основе природы проблемы.

1
ответ дан 3 December 2019 в 22:22

Теги

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