Как найти файл service

Лучше не редактировать эти файлы, а делать так называемые оверрайды.

systemctl edit apache2
systemctl cat apache2

Команда systemctl edit apache2 создаст /etc/systemd/system/apache2.service.d/override.conf
и сама выполнит systemctl daemon-reload.
Комнада systemctl cat apache2 покажет из каких файлов собран apache2.service, т.к. в каталоге /etc/systemd/system/apache2.service.d/ могут быть и другие файлы.

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

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

Файлы системных служб находятся в таких каталогах:

  • /usr/lib/systemd/system
  • /lib/systemd/system
  • /etc/systemd/system

Файлы пользовательских служб можно найти в таких каталогах:

  • /usr/lib/systemd/user
  • /lib/systemd/user
  • /etc/systemd/user
  • $USER/.config/systemd/user

Причём файлы сервисов поставляемые с пакетами, как правило, располагаются в каталогах /lib и /usr/lib, а в /etc/ расположены модифицированные файлы юнитов переопределяющие стандартные настройки. Вы можете прочитать более подробно об управлении службами в Linux в статье Управление службами в Linux.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

You could do this (using nullmailer as an example):

systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}'

That will produce something like this:

/lib/systemd/system/nullmailer.service

Then to see the service file content, you could do this:

cat $(systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}')

And that would produce something like this:

[Unit]
Description=nullmailer


[Unit]
Description=Nullmailer relay-only MTA

... stuff omitted for brevity ...

[Install]
WantedBy=multi-user.target

Hope it helps.

PS. I typically put those commands in an alias file just for convenience.

P.PS. As Joaquin mentioned, you can use the -P flag instead of using the grep|awk combo I was using/mentioning.

systemctl show nullmailer -P FragmentPath

I have a windows service and I need to create directory to store some info. The directory path must be relative to the windows service exe file.
How can get this exe file path ?

asked May 14, 2010 at 12:09

3

answered May 14, 2010 at 12:10

Incognito's user avatar

IncognitoIncognito

16.6k9 gold badges52 silver badges74 bronze badges

6

Tip: If you want to find startup path of installed windows service, look here from registry .

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices + ServiceName

There are keys about windows service

answered Sep 3, 2013 at 12:36

TC Tarım Köy İşleri's user avatar

1

Instead of using a directory relative to the executable, and therefore needing admin privileges, why not use the common application data directory, which is accessible through

Environment.GetFolderPath(SpecialFolder.CommonApplicationData)

This way your app doesn’t need write access to its own install directory, which makes you more secure.

answered May 14, 2010 at 12:13

Stewart's user avatar

StewartStewart

3,95817 silver badges20 bronze badges

2

Try this

System.Reflection.Assembly.GetEntryAssembly().Location

answered May 27, 2013 at 5:59

ramin eftekhari's user avatar

ramin eftekhariramin eftekhari

3,1652 gold badges17 silver badges28 bronze badges

1

string exe = Process.GetCurrentProcess().MainModule.FileName;
string path = Path.GetDirectoryName(exe); 

svchost.exe is the executable which runs your service which is in system32. Hence we need to get to the module which is being run by the process.

davervw's user avatar

davervw

1711 silver badge5 bronze badges

answered May 14, 2010 at 12:58

Sachin's user avatar

SachinSachin

8826 silver badges7 bronze badges

1

The default directory for a windows service is the System32 folder. In your service, though, you can change the current directory to the directory that you specified in the service installation by doing the following in your OnStart:

        // Define working directory (For a service, this is set to System)
        // This will allow us to reference the app.config if it is in the same directory as the exe
        Process pc = Process.GetCurrentProcess();
        Directory.SetCurrentDirectory(pc.MainModule.FileName.Substring(0, pc.MainModule.FileName.LastIndexOf(@"")));

Edit: an even simpler method (but I haven’t tested yet):

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

answered May 14, 2010 at 12:19

derek's user avatar

derekderek

4,8261 gold badge23 silver badges26 bronze badges

1

This did the trick for me

Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);    

IKavanagh's user avatar

IKavanagh

5,99911 gold badges41 silver badges47 bronze badges

answered Apr 25, 2018 at 7:57

Danw25's user avatar

Danw25Danw25

3062 silver badges13 bronze badges

This will return you the correct path even if running under LocalSystem account which defaults to system32:

System.IO.Path.GetDirectoryName(new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath);

answered Mar 3, 2021 at 10:59

Mecanik's user avatar

MecanikMecanik

1,5111 gold badge19 silver badges45 bronze badges

If you want to get access of Program Files folder or any other using programming you should use the below code which is provide rights to specific folder.

 private bool GrantAccess(string fullPath)
        {
            DirectoryInfo dInfo = new DirectoryInfo(fullPath);
            DirectorySecurity dSecurity = dInfo.GetAccessControl();
            dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
            dInfo.SetAccessControl(dSecurity);
            return true;
        }

answered Feb 21, 2018 at 12:45

Ebg Test's user avatar

Ebg TestEbg Test

911 silver badge11 bronze badges

3

Не удается открыть файл .SERVICE? Вам интересно, что в нем содержится? На нашем сайте мы объясним вам, что это за файл, для чего он используется и какая программа открывает файл .SERVICE.

Расширение файла .SERVICE создано Леннартом Поттерингом и Кей Сиверс. .SERVICE классифицируется как системные файлы.

Файл SERVICE — это файл сервисного модуля, включенный в systemd, систему инициализации (инициализации), используемую различными дистрибутивами Linux для загрузки пользовательского пространства и управления процессами. Он содержит информацию о том, как управлять серверным приложением или службой, в том числе о том, как запускать или останавливать службу и когда она должна запускаться автоматически.

Система инициализации systemd — это набор программ, включенных в различные дистрибутивы Linux. Система используется для управления различными аспектами сервера. Юнит — это ресурс, которым systemd может оперировать и управлять. Каждый модуль имеет файл конфигурации, известный как файл модуля. Суффикс файла устройства указывает, для какого типа устройства в файле хранится информация о конфигурации.

Файлы юнитов systemd по умолчанию расположены в следующем каталоге:

/lib/системд/система

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

/etc/системд/система/

Если вы хотите отредактировать файл модуля SERVICE, не редактируйте файл SERVICE напрямую в каталоге. Вместо этого вы должны скопировать файл, отредактировать копию, а затем переопределить исходный файл SERVICE.

ПРИМЕЧАНИЕ: systemd загружается многими дистрибутивами Linux, включая Red Hat, Arch Linux, Fedora, CentOS, Ubuntu, Mageia, CoreOS и Alpine Linux.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как составить именной указатель к книге
  • Как найти резонансную частоту колебаний маятника
  • Как найти программу powerpoint на ноутбуке
  • Как найти одну сторону квадрата через площадь
  • Как найти работы в инстаграм

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии