Для изоляции проблемы переместитесь/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. Если это действительно работает, то проблема должна быть с Вашим исходным сценарием.
Это не указано в вопросе, если Вы хотите, это выполнилось на локальной или удаленной машине. Это также не указано, какая оболочка присутствует на любой машине, таким образом, я принимаю 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
}
Это может быть слишком просто для Ваших потребностей, но Вы получаете идею.
Вы на правильном пути. Если 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.