cron
регистрирует свои действия с по syslog
с уровнем детализации, зависящим от настроенного уровня журнала. Это не включает результаты работы.
Что касается последнего, на странице руководства говорится
When executing commands, any output is mailed to the owner of the crontab (or to the user named in the MAILTO environment variable in the crontab, if such exists).
Поскольку у вас нет настроенного MTA, выходные данные отбрасываются, как указано в ваших журналах.
Если вы хотите настроить MTA, пакеты MTA в Debian и его производных поставляются с хорошими сценариями установки, которые могут настроить простую настройку для вас; sudo apt install postfix
и следуйте инструкциям.
В качестве альтернативы вы можете перенаправить вывод ваших заданий cron в системный журнал, используяlogger
:направить вывод ваших заданий вlogger -p cron.info
(для обычного вывода )иlogger -p cron.err
(для ошибок ).
Причина, по которой cron предполагает отправлять выходные данные по электронной почте, заключается в том, что выходные данные заданий cron имеют степень детализации, которая не соответствует журналу системного журнала (, который не хранится для каждого пользователя ). Каждый пользователь системы может настраивать задания cron, но пользователи не обязательно имеют доступ к системным журналам, и они могут не захотеть, чтобы все другие пользователи, имеющие доступ к этим журналам, видели выходные данные своих заданий. Когда cron был разработан, электронная почта была разумным способом доставить результат задания cron пользователю, который им управлял, :ожидалось, что системы Unix имеют работающую настройку электронной почты. В настоящее время это менее очевидно не потому, что изменилась пригодность электронной почты, а потому, что изменилась ее доступность. В системах с работающей электронной почтой по-прежнему имеет смысл использовать ее для вывода cron; в качестве альтернативы, задания могут выводиться в -файлы журналов пользователей (с определенными перенаправлениями в каждом задании ).
таймеры systemd не страдают от этой проблемы :пользовательские таймеры регистрируются в приватном, согласно -пользовательскому журналу.
Не указывайте RemoteCommand
в файле конфигурации. Наличие RemoteCommand
иногда полезно для определения псевдонима для хоста, чтобы ssh myalias
запускал определенную команду. Это бесполезно в записи общего назначения -. Как вы заметили,он не позволяет делать что-либо, кроме запуска этой конкретной команды :, вы не можете использовать rsync, sftp, sshfs или даже запускать ssh myhost specific-command
в интерактивном режиме.
Если вы хотите по умолчанию запускать tmux при подключении к хосту, есть два разумных решения:
На сервере отредактируйте свой .profile
или аналогичный сценарий времени входа -(.zprofile
, .config/fish/config.ish
, .login
, … ), чтобы запускать tmux при интерактивном входе в систему. См., например. Как запустить скрипт сразу после подключения по SSH? , Запуск tmux при входе по ssh .
На клиенте определите оболочку вокруг ssh
, запускающую tmux. Например, функция оболочки:
tsh () {
ssh "$@" tmux new -ADs remote
}
Директива Match host
не поможет, так как вы не заинтересованы в том, чтобы делать что-то по-другому на основе имени хоста. Я не думаю, что у клиента ssh есть способ делать что-то по-разному в зависимости от того, была ли передана команда ssh. Вы можете выполнить код с помощью Match exec
. Я не думаю, что есть чистый способ определить, был ли ssh вызван с помощью команды, но грязный способ может быть достаточно хорош для вас.
Host myhost
Match exec "ps -o args= $PPID | grep -v '.* '"
RemoteCommand if [ -t 0 ]; then exec tmux new -ADs remote; fi
Если ssh
был вызван только с именем хоста и без параметров, запустите tmux. Если ssh
была вызвана хотя бы с одним параметром или командой в дополнение к имени хоста, директива RemoteCommand
не применяется. Также не запускайте tmux, если ввод не поступает с терминала (, например.echo ls | ssh myhost
). Это должно позаботиться о большинстве случаев, ошибаясь на стороне не запуска tmux (, например. ssh -L … myhost
не запускается tmux ).
Начиная с OpenSSH 7.6 , ssh
имеет параметр командной строки RemoteCommand
. Его можно использовать для переопределения соответствующей директивы в ssh_config
. Установка его на none
очищает параметр RemoteCommand
.
Следовательно, вы можете использоватьssh -o RemoteCommand=none...
(или, возможно, в вашем случае rsync -e 'ssh -o RemoteCommand=none'...
), чтобы позволить ssh
игнорировать набор удаленных команд в вашем файле конфигурации.
Существует как минимум несколько (открытых в настоящее время)отчетов об ошибкахс запросом на автоматическое переопределение параметра в ssh_config
командой, указанной в командной строке (, если любой ).