SSH LocalCommand на выходе

Для изоляции проблемы переместитесь/usr/local/xxxx/check-interface.bash в/etc/cron.hourly/check и затем посмотрите, работает ли это.

Если сценарий действительно работает, то проблема вызывается владением/полномочиями или связала проблему, которая препятствует тому, чтобы крон выполнил сценарии в/usr/local/xxxx /*.

Если сценарий не работает, то проблема наиболее вероятна с Вашим сценарием самим.

Как другая проверка работоспособности, замените содержание /usr/local/xxxx/check-interface.bash с чем-то очень простым, как:

date > /tmp/check-interfaces.log 2>&1

И затем посмотрите, заполняется ли /tmp/check-interfaces.log на самом деле Вашим cronjob. Если это действительно работает, то проблема должна быть с Вашим исходным сценарием.

9
16.06.2012, 02:36
2 ответа

Это не указано в вопросе, если Вы хотите, это выполнилось на локальной или удаленной машине. Это также не указано, какая оболочка присутствует на любой машине, таким образом, я принимаю bash для обоих.

Если Вы хотите выполнить его на удаленной машине, посмотрите на ~/.bash_logout, который выполняется, когда оболочка входа в систему выходит из системы корректно. От man bash:

Когда оболочка входа в систему выходит, удар читает и выполняет команды из файла ~/.bash_logout, если это существует.

Можно выполнить в тесте ~/.bash_logout чтобы проверить, является ли вышедшая оболочка сессией SSH, что-то как следующее должно работать:

if [[ $SSH_CLIENT || $SSH_CONNECTION || $SSH_TTY ]]; then
    # commands go here
fi

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

ssh() {
    if command ssh "$@"; then
        # commands go here
    fi
}

Это может быть слишком просто для Ваших потребностей, но Вы получаете идею.

11
27.01.2020, 20:06
  • 1
    мне была нужна команда, которая будет выполняться на локальной машине. Спасибо за предложение. Это работает гладко. –  Roberto Aloi 18.06.2012, 19:51

Вы на правильном пути. Если ssh сессия является оболочкой входа в систему (вместо удаленной команды), bash получит /etc/bash.logout и ~/.bash_logout когда Вы выходите из оболочки.

Если Вы хотите выполнить удаленную команду, то можно вызвать bash быть оболочкой входа в систему. LocalCommand могло быть подобно этому:

bash -l -c /execute/some/command

От man 1 bash

-c string   If  the  -c  option  is  present, then commands are read from 
string.  If there are arguments after the string, they are assigned to 
the positional parameters,  starting with $0.
-l   Make bash act as if it had been invoked as a login shell 

When  a login shell exits, bash reads and executes commands from the 
files ~/.bash_logout and /etc/bash.bash_logout, if the files exists.
1
27.01.2020, 20:06
  • 1
    Не при выполнении удаленной команды (Если команда указана, она выполняется на удаленном хосте вместо оболочки входа в систему.). Однако читая вопрос OP ближе, кажется, что он хочет, чтобы что-то произошло локально, таким образом, я думаю, что Вы отвечаете, является более соответствующим. –  George M 15.06.2012, 22:47

Теги

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