Использование Crontab -e с нестандартным редактором с ограниченной оболочкой (невозможно экспортировать переменную или запустить редактор)

Юнит-файл в Debian аналогичен, содержит:

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID

Здесь EnvironmentFile назначает SSHD_OPTS:

# Options to pass to sshd
SSHD_OPTS=

Вероятно, Fedora использует аналогичную систему, но по какой-то причине они просто не задали переменную явно. Это не должно иметь значения, она должна расширяться до пустой строки.

Есть упоминание здесь, что, например, httpd.service использует OPTIONS аналогично, и устанавливает ее в /etc/sysconfig/httpd. Так что, скорее всего, он просто не установлен по какой-то причине.

Вы можете проверить командную строку sshd с помощью ps, чтобы увидеть, на что расширена переменная, а также установить ее на что-то в файле sysconfig, чтобы проверить, что она работает, если установлена там.


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

Этот $MAINPID, однако, особенный.

1
05.09.2017, 15:56
2 ответа

Если вы можете передавать файлы в систему и из нее, сделайте резервную копию текущего crontab:

$ crontab -l >crontab.txt

Если вы не можете выполнять перенаправления, просто выполните crontab -lи скопируйте и вставьте crontab (убедившись, что все идентично).

Затем, с текстовым файлом crontab в не очень заблокированной системе, обновите его в редакторе.

Перенесите файл обратно и выполните

$ crontab crontab.txt

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

Я не беру на себя никакой ответственности.

0
27.01.2020, 23:44

Судя по сообщению об использовании, вы используете lshell . Это не оболочка в стиле Bourne -, такая как bash, ksh, zsh, BusyBox и другие. Это даже не ограниченная оболочка, как rksh или rbash. В нем нет переменных, перенаправлений или каких-либо других функций, кроме выполнения фиксированного набора команд с некоторыми аргументами.

Если вы можете запустить vi, это означает, что либо в lshell есть ошибка, либо он был неправильно сконфигурирован. Он предназначен для предотвращения запуска произвольных команд.

Поскольку вы можете запустить php, вы можете обойти это. Но, очевидно, администраторы не собираются этого делать.

Кронтаб обычно короткий, поэтому, если вы хотите отредактировать его в другом редакторе, откройте достаточно большой терминал, скопируйте его целиком на локальный компьютер через буфер обмена графического интерфейса, отредактируйте и скопируйте в другом направлении. В nano убедитесь, что автоматический перенос строк отключен(Alt + L для переключения ), а также (, но это не имеет значения для crontab )автоматический отступ(Alt + I).

1
27.01.2020, 23:44

Теги

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