Я могу использовать символьную ссылку как услуга systemd?

Хорошее решение: использовать sudo apt-cache search apt |less В UNIX мир пытаются уменьшить до использования графического программного обеспечения.

14
04.04.2015, 00:54
3 ответа

Я не верю, что вообще есть способ. Вы сказали, что Unix/Linux, но, возможно, вас интересует решение для конкретной ОС?

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

Другое местоположение - ARGV [] в самом процессе. Это может быть запрошено (например, с помощью pargs ) и вернет неусеченное содержимое. Но поскольку ARGV является частью памяти процесса, его можно модифицировать в любое время. Содержимое может отличаться от содержимого командной строки, запустившей процесс.

Более поздний пользователь не может гарантированно найти исходную командную строку.


Я только что нашел ответ Стефана Шазеласа на аналогичную проблему: ps: full command is too long

Похоже, он включает метод, который пытается декодировать ARGV [] в двоичных файлах x86 ELF, но я не смог получить из него данные в тестовом случае. Я не знаю почему. Но техника кажется разумной.

-121--108521-

CTRL + D здесь бессмысленно - это просто другой байт. Это связано с тем, что последовательный терминал не настроен на его обработку. В частности, вы находитесь в необработанном режиме или неканоническом режиме ввода . Смотрите флаг -иканон на выходе stty -a ? Это его ошеломляет. Вот как POSIX описывает терминал должен учитывать символ EOF:

  • EOF
    • Специальный символ на входе, который распознается, если набор флаг ICANON . При получении все байты, ожидающие чтения, немедленно передаются процессу без ожидания новой строки, и EOF отбрасывается. Таким образом, если нет байтов, ожидающих (то есть EOF возникла в начале строки) , из read () возвращается отсчет байтов, представляющий собой указание конца файла. Если установлено значение ICANON , то при обработке символ EOF будет удален.

Но вы не работаете с каноническим терминалом - вы работаете с терминалом, который будет передавать любые/все данные любому читателю, если его попросят, если есть хотя бы один байт. Терминал не буферизирует ввод по строкам - и поэтому он не может заменить байт EOF пустым чтением - вместо этого он просто толкает байт, который cat только побуждает его продолжать чтение.

  • При наборе ICANON должна быть включена каноническая обработка. Это обеспечивает возможность стирания и уничтожения функций редактирования, а также сборки входных символов в строки, разделенные NL , EOF и EOL , как описано в Canonical Режима Input Processing .

  • Если ICANON не набора,запросы на чтение должны удовлетворяться непосредственно из входной очереди. Считывание не выполняется до тех пор, пока не будет получено не менее байт MIN или не истечет время ожидания TIME между байтами. Значение времени представляет десятые доли секунды. Для получения дополнительной информации см. Обработка ввода в неканоническом режиме .

-121--139555-

Насколько мне известно, система не будет иметь с этим особого дела. Как я понимаю, вы хотите переопределить поведение sshd.service , верно?

К счастью для вас, systemd предназначен для такого рода вещей. Просто поместите определение сервиса в /etc/systemd/system/ssh.service , выполните systemctl daemon-reload для перезагрузки файлов единиц, и systemd автоматически использует эту конфигурацию вместо системы ssh.service .

Хотите, чтобы system enable msshd.service тоже работал? Нет проблем. В разделе [Install] файла устройства добавьте строку с именем Alias = mysshd.service . Затем выполните команду systemctl reenable ssh.service , чтобы система исправила символы единиц, и вы были золотыми.

Теперь вы не предоставили подробную информацию о том, что должен делать msshd.service . Если он полностью отличается от обычного ssh.service , отлично! Используйте описанный выше метод. Однако, если вы просто хотите изменить одну маленькую вещь, то вы используете неправильный подход. systemd позволяет создавать «фрагменты» единичных файлов, которые будут применяться поверх обычных единичных файлов. Это позволяет добавлять или переопределять отдельные директивы, позволяя остальной части файла устройства получать обновления из диспетчера пакетов. Для этого просто создайте файл /etc/systemd/system/ssh.d/my-custom-config.conf (можно изменить my-custom-config.conf на любой требуемый файл, а также можно использовать несколько файлов переопределений). В этом файле поместите любые директивы, которые требуется изменить, или добавьте их в обычный ssh.service . Можно даже добавить директивы Alias = , чтобы systemctl start mysshd.service работал! Не забудьте выполнить systemctl daemon-reload после завершения (и, если вы использовали Alias = , systemctl reenable ssh.service ).

Кроме того, никогда, никогда не изменять файлы системных единиц в /usr/lib/systemd . Всегда! Стандарт иерархии файловой системы требует , чтобы /usr считывался доступным только для чтения. На практике это означает, что менеджер пакетов обрабатывает /usr (за исключением /usr/local ), и вы не коснетесь того, что обрабатывает менеджер пакетов, особенно потому, что то, что вы изменяете, вероятно, будет в конечном итоге перезаписано. Вместо этого, поместите свои вещи куда-нибудь, как /etc .

9
27.01.2020, 19:51

Раньше символические ссылки были невозможны. Но они есть на сегодняшний день.

1
27.01.2020, 19:51

Используйте linkс полным путем:

systemctl link /home/nick/myservice.service

Обратите внимание, что вы не можете ссылаться на файл, который сам по себе уже является ссылкой.

15
27.01.2020, 19:51

Теги

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