Jump to content

Есть вопрос по systemd


Recommended Posts

Posted

На домашнем ПК настраиваю Conky.

В принципе настроил, но утилита довольно часто вылетает.

Делать скрипт, который будет его автоматически запускать, либо прикручивать monit не захотел, решил сделать все по правильному, через systemd.

 

Сделал юнит:

[Unit]
Description=Conky System Monitor
StartLimitIntervalSec=300
StartLimitBurst=5
After=graphical.target

[Service]
Type=forking
ExecStart=/usr/bin/conky -d
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=graphical.target

Засунул его в ~/.config/systemd/user (и симлинк на ~/.local/share/systemd/user), подключил, запустил - работает.

Перегружаюсь - после логина ничего нет.

Смотрю логи - conky жалуется, что нет дисплея.

То есть мне нужно сделать юнит так, чтобы conky запускался после того, как полностью загрузится десктоп.

И не получается.

 

Сделать просто фиксированную задержку при старте (ExecStartPre=/bin/sleep 30) - это как-то костыльно, тогда уж можно было с systemd вообще не заморачиваться.

Хочется по правильному.

Либо найти правильные зависимости, либо сделать таймер.

 

С зависимостями ничего не получается.

И с таймером тоже. Делал примерно как тут: https://askubuntu.com/questions/1083537/how-do-i-properly-install-a-systemd-timer-and-service

Но сервис не стартует.

Не подскажете, что исправить?

Может быть у кого-то уже ест нормальный юнит подобного типа?

Posted

в systemd не силен, но:

у вас возможно просто не задана переменная DISPLAY (DISPLAY=:0.0)

можете просто написать скрипт, который по кругу рестартует сервис при падении (while true... и не забыть выключить fork)

 

Posted

В нормальном случае переменная и так передается.

А при досрочном запуске это не работает, даже если ее вручную задавать.

 

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

 

В общем, сделал через таймер.

 

Сервис:

[Unit]
Description=Conky System Monitor
StartLimitIntervalSec=300
StartLimitBurst=5
After=graphical.target

[Service]
Type=forking
ExecStart=/usr/bin/conky -d
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=graphical.target

 

Таймер (с OnBoot переделал на OnActive):

[Unit]
Description=Conky System Monitor (delayed)

[Timer]
OnActiveSec=1min

[Install]
WantedBy=timers.target

 

Конфиг:

conky.config = {

  -- SYSTEM
  background = true,
  cpu_avg_samples = 2,
  net_avg_samples = 2,
  diskio_avg_samples = 10,
  update_interval = 1.0,

  -- VISUAL
  double_buffer = true,
  own_window = true,
  own_window_class = 'Conky',
  own_window_type = 'desktop',
  own_window_argb_visual = true,
  own_window_argb_value = 160,
  use_xft = true,
  border_width = 1,
  border_inner_margin = 4,
  border_outer_margin = 4,
  stippled_borders = 0,
  draw_borders = false,
  draw_graph_borders = true,
  draw_outline = false,
  draw_shades = false,
  maximum_width = 450,
  minimum_width = 450,
  minimum_height = 100,

  -- FONTS
  font  = 'DejaVu Sans Mono:size=10',       -- default
  font0 = 'DejaVu Sans Mono:bold:size=10',  -- groups
  font1 = 'Ubuntu:bold:size=10',            -- sections
  font2 = 'Roboto Condensed:size=9',        -- small text

  -- COLORS
  own_window_colour = '000000',
  default_outline_color = '808080',
  default_shade_color = '333333',
  default_color = 'c0c0c0',
  color0 = 'ffffff', -- title and groups
  color1 = '9999cc', -- labels
  color2 = 'c0e0c0', -- values
  color3 = '00ffc0', -- graphs
  color4 = 'd9bc83', -- accent
  color5 = '00bfff', -- teal
  color6 = '00c0ff', -- info (blue)
  color7 = 'c0ff00', -- ok (green)
  color8 = 'ffa726', -- warning (orange)
  color9 = 'f1544b', -- critical (firebrick)
  graph_gradient_mode = 'hsv',

  -- OPTIONS
  short_units = true,
  format_human_readable = true,
  extra_newline = false,
  out_to_console = false,
  out_to_ncurses = false,
  out_to_stderr = false,
  out_to_x = true,
  use_spacer = 'left',
  pad_percents = 3,
  show_graph_range = false,
  show_graph_scale = false,
  if_up_strictness = 'address',
  temperature_unit = 'celsius',
  imlib_cache_size = 0,
  no_buffers = true,
  text_buffer_size = 2048,
  override_utf8_locale = true,

  -- POSITION
  gap_x = 25,
  gap_y = 50,
  alignment = 'top_right',

  -- TEMPLATES
  template1 = [[${font0}${color1}\1${font}${color} ${font2}(${fs_type \1})${font}${alignr}${color2}${fs_used \1}${color} / ${color2}${fs_size \1}${color}
${voffset -4}${fs_bar \1}${voffset -15}
]],
  template2 = [[${\1 name \2} ${\1 pid \2} ${\1 cpu \2} ${\1 time \2} ${\1 mem \2} ${\1 mem_vsize \2}]],
}

conky.text = [[
${voffset 2}${color0}${font1}[SYSTEM] ${color}${hr 2}${font}
Hostname: ${alignr}${color2}${nodename}${color}
OS: ${alignr}${color2}${execi 6000 lsb_release -d| awk '{$1=""; print $0}'}${color}
Kernel: ${alignr}${color2}${kernel}${color}
Load average: ${color2}${alignr}${loadavg}${color}
Uptime: ${alignr}${color2}${uptime}${color}
${voffset 2}${color0}${font1}[TEMPERATURE] ${color}${hr 2}${font}
ACPI: ${color2}${acpitemp}°C${color}
${voffset 2}${color0}${font1}[CPU] ${color}${hr 2}${font}
${execi 3600 lscpu --parse=modelname | tail -1}${alignr}${color2}${freq}MHz${color}  ${color2}${cpu}%${color}
${cpugraph cpu0 30,0 00ff00 ff0000 -t}
${color1}¤1${color} ${cpubar cpu1 6,35} ${color2}${cpu cpu1}%${color}${goto 120}${color1}¤3${color} ${cpubar cpu3 6,35} ${color2}${cpu cpu3}%${color}${goto 240}${color1}¤5${color} ${cpubar cpu5 6,35} ${color2}${cpu cpu5}%${color}${goto 360}${color1}¤7${color} ${cpubar cpu7 6,35} ${color2}${cpu cpu7}%${color}
${color1}¤2${color} ${cpubar cpu2 6,35} ${color2}${cpu cpu2}%${color}${goto 120}${color1}¤4${color} ${cpubar cpu4 6,35} ${color2}${cpu cpu4}%${color}${goto 240}${color1}¤6${color} ${cpubar cpu6 6,35} ${color2}${cpu cpu6}%${color}${goto 360}${color1}¤8${color} ${cpubar cpu8 6,35} ${color2}${cpu cpu8}%${color}
${voffset 2}${color0}${font1}[MEMORY] ${color}${hr 2}${font}
${font1}${color0}RAM ${font}${color}${alignc}${color2}${mem}${color} / ${color2}${memmax}${color}${alignr}${color2}${memperc}%${color}
${membar}
${font1}${color0}SWAP ${font}${color}${alignc}${color2}${swap}${color} / ${color2}${swapmax}${color}${alignr}${color2}${swapperc}%${color}
${swapbar}
${voffset 2}${color0}${font1}[STORAGE] ${color}${hr 2}${font}
${font1}Read IO:${font} ${color2}${diskio_read}${color}${alignr}${font1}Write IO:${font} ${color2}${diskio_write}${color}
${diskiograph_read 25,200}${alignr}${diskiograph_write 25,200}
${template1 /}
${template1 /home}
${template1 /data}
${template1 /backup}
${voffset 2}${color0}${font1}[PROCESSES] ${color}${hr 2}${font}
Active/Total: ${alignr}${color2}${running_processes}${color} / ${color2}${processes}${color}
Top-5 (CPU%)         PID   CPU%  CPU Time   MEM%   MEM
${template2 top 1}
${template2 top 2}
${template2 top 3}
${template2 top 4}
${template2 top 5}
${voffset 2}${color0}${font1}[NETWORK] ${color}${hr 2}${font}
Internal IP: ${alignr}${color2}${addrs eno1}${color}
External IP: ${alignr}${color2}${texeci 3600 wget -q -O- https://ipecho.net/plain}${color}
${color1}Upload${color}: ${color2}${upspeed eno1}${color}${alignr}${color1}Download${color}: ${color2}${downspeed eno1}${color}
${upspeedgraph eno1 25,200}${alignr}${downspeedgraph eno1 25,200}
]]

 

Результат:

conky.thumb.png.11000c1861c881a7afa9f16a265455ca.png

 

Сейчас все работает, мониторинг стартует примерно через минуту после логина.

Автоматом перезапускается при падениях.

Если вдруг ошибка фатальная (например некорректный конфиг), то запускаться перестает, после устранения причины нужно сделать systemctl --user reset-failed conky

Posted (edited)

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

 

@jffulcrum пошлятина это GKrellM, а Glances совсем другое )

Edited by yandrey
Posted
Цитата

вылет может случится при резких изменениях в выводе,

Ну так я пока конфиг отлаживал, каждое третье сохранение вылетал.

 

Цитата

Glances

Посмотрю, но это вроде бы совсем другое.

Это утилита, которая в своем окне выводит информацию.

Соответственно ее нужно запускать, например в screen.

А conky рисует поверх десктопа, типа наложение на обои, но динамическое.

  • 1 month later...
Posted

Сейчас сделан такой юнит:

 

~/.config/systemd/user/conky.service

[Unit]
Description=Conky System Monitor
StartLimitIntervalSec=300
StartLimitBurst=5
After=graphical.target

[Service]
Type=forking
ExecStart=/usr/bin/conky -d
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=graphical.target

 

~/.config/systemd/user/conky.timer

[Unit]
Description=Conky System Monitor (delayed)

[Timer]
OnActiveSec=1min

[Install]
WantedBy=timers.target

Юнит пользовательский (не системный), запускается сам после входа (через 5 минут), при необходимости вручную управляется через systemctl (с добавлением ключа --user).

Но есть один досадный баг.

Если я завершаю сеанс GDM (или подключался по RDP и затем отключился — по умолчанию GDM прибивает все пользовательские процессы), то conky завершает работу, но тут же перезапускается и грузит одно ядро на 100%. Сам при этом не работает и другим не дает — если снова войти в систему, то мониторинга не отображается. Нужно вначале прибить глюкнувший процесс, после чего он автоматически перезапускается нормально.

 

У меня пока что две основные версии.

Либо это не совсем правильное поведение systemd и он (пере)запускает conky, когда десктопа уже (или еще) нет, что и приводит к такому поведению. Тогда нужно в описании юнита где-то указать, чтобы он запускался после инициализации десктопа (хотя After=graphical.target по идее именно это и должен делать).

Либо это конфликтует системный способ "демонизации" с настройкой "background = true". Хотя пока не могу понять, каким образом conky запускает сам себя после завершения сеанса (тем более запускает под пользовательской учеткой).

 

Не посоветуете, где посмотреть подробнее?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.