Linux: решите проблему отсутствия переменных среды службы Systemd
Linux: решите проблему отсутствия переменных среды службы Systemd

В Linuxсистемеэксплуатация и обслуживание,Мы можем столкнуться с невозможностью получить переменную среды системы при использовании Служить под управлением systemd.,особенноPATHпеременная,В результате путь к команде не может быть найден правильно. Это действительно общая проблема,Потому что Служить, запускаемый systemd, обычно не задействует переменные среды пользователя. под,Давайте рассмотрим несколько способов решения этой проблемы.

Обзор решения

  1. Установите переменные среды через файл systemdСлужить
  2. Используйте Скрипт для настройки среды и запуска Служить.
  3. Установить переменные среды глобально

Подробное решение

1. Установите переменные среды через служебные файлы systemd.

в системеиз Служитьв файле определения(обычно расположен/etc/systemd/system/),мы можем использоватьEnvironmentдиректива для установки определенногоизсредапеременная。Например,Если мы знаем требуемый путь к команде,Вы можете напрямую Служить Установить в файлPATH

Язык кода:javascript
копировать

ini
[Service]
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

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

2. Используйте скрипты для настройки среды и запуска службы.

Другой подход — написать сценарий-оболочку, в котором вы устанавливаете необходимые переменные среды, а затем запускаете службу. Таким образом, когда systemd запускает службу, он фактически запускает сценарий.

Создать скрипт,Напримерstart-service.sh

Язык кода:javascript
копировать

bash
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Начни свою Служить
exec /path/to/your/service

Затем укажите этот скрипт в служебном файле systemd:

Язык кода:javascript
копировать

ini
[Service]
ExecStart=/path/to/start-service.sh

Этот подход более гибок и позволяет при необходимости настраивать переменные среды, но требует дополнительного обслуживания сценариев.

3. Установите переменные среды глобально

Мы также можем рассмотреть возможность установки переменных среды на уровне системы.,Таким образом, все Служить и пользователи смогут получить доступ к этим переменным. Например,Можно найти в/etc/environmentСредние настройкиPATH

Язык кода:javascript
копировать

bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

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

4. Уместно ли загружать /etc/profile?

нагрузка /etc/profile Приходите за systemd Служить设置средапеременнаяэто осуществимоизрешение,Но с этим нужно обращаться осторожно。/etc/profile Он предназначен для интерактивных оболочек входа, а не для системных служб или неинтерактивных оболочек. Поэтому непосредственно в systemd Служитьв файленагрузка /etc/profile Может не работать должным образом или вызывать нежелательные побочные эффекты.

Однако, если нам действительно нужно начать с /etc/profile Чтобы извлечь определенные настройки переменных среды, вы можете создать скрипт-оболочку, которая сначала загружает /etc/profile,Тогда начнем нашу Служить. Это гарантирует, что перед запуском Служить будут установлены правильные переменные среды.

Создать скрипт-оболочку
  1. создавать Скрипт:Создать скрипт,например start-my-service.sh
  2. нагрузка /etc/profile:существовать Скриптсередина,Выполнить первым source /etc/profile Возьмите переменную среды нагрузки.
  3. Начать Служить: Тогда,Выполните команду запуска Служить.
Язык кода:javascript
копировать

bash
#!/bin/bash
# нагрузка/etc/profile
source /etc/profile

# Начни свою Служить
exec /path/to/your/service
Изменить служебный файл systemd

в системе В служебный файл поместите ExecStart Указывает на предыдущий скрипт-оболочку.

Язык кода:javascript
копировать

ini
[Service]
ExecStart=/path/to/start-my-service.sh
На что следует обратить внимание
  • Этот метод может быть более сложным, чем установка переменных среды непосредственно в файле Служить.
  • необходимо обеспечить /etc/profile Настройки в подходят для нашего Служить и не мешают нормальной работе Служить.
  • некоторые в /etc/profile Установленные переменные среды могут быть предназначены для интерактивных сеансов пользователя и не обязательно подходят для использования в фоновом режиме.

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

в заключение

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose