брандмауэр не работает должным образом в кикстарте

Прочитав ответ MelBurslan и различные комментарии, я решил попробовать (вдохновленный их предложениями) сделать версию на Lua. Это было сделано в Lua 5.1.5 - я не уверен, будет ли это работать с последней версией Lua.

Общая идея заключается в использовании popen (открыть трубу) Lua для выполнения top и последующей обработки полученных данных с помощью регулярного выражения (или pattern, как оно называется в Lua). Совпадающие строки (а это большинство из них) затем рассматриваются на предмет пересечения порогового процента. Если да, то они добавляются в таблицу.

Если таблица не пуста, то вызывается zenity для вывода сообщения пользователю. Несколько "заморочек", которые я обнаружил во время разработки:

  • Я добавил в zenity тайм-аут в 60 секунд, чтобы, если вас в это время не было за компьютером, не заполнять экран предупреждающими диалогами.
  • Я добавил --display=:0.0, чтобы при запуске под cron находился экран дисплея.
  • Я упростил проверку на "каждые 15 минут" в кронтабе, вот так:

    */15 * * * * /home/nick/check_cpu_usage.lua
    
  • Регулярное выражение захватывает все от top на случай, если вы захотите сделать другие тесты (например, на использование слишком большого количества памяти).

Я думаю, это будет быстрее, чем запускать множество процессов и подпрограмм. Кажется, это работает нормально. Проверьте, уменьшив порог (например, до 5) и изменив запись в кронтабе на проверку каждые минуты.


check_cpu_usage.lua

#! /usr/local/bin/lua

THRESHOLD = 90  -- percent

-- pipe output of top through a file "f"
f = assert (io.popen ("top -b -n 1 -w 512"))
t = { }

-- check each line
for line in f:lines() do

  -- match top output, eg.
  --   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  -- 30734 nick      20   0 6233848 3.833g 3.731g S   8.6 12.2   3:11.75 VirtualBox

  local pid, user, priority, nice, virt, res, shr, 
        status, cpu, mem, time, command =
    string.match (line,
      "^%s*(%d+)%s+(%a+)%s+(%-?%d+)%s+(%-?%d+)" ..
--         pid      user   priority    nice
      "%s+([%d.]+[g]?)%s+([%d.]+[g]?)%s+([%d.]+[g]?)%s+([DRSTZ])%s+(%d+%.%d+)%s+(%d+%.%d+)" ..
--        virtual          res           shr             status       %cpu        %mem
      "%s+([0-9:.]+)%s+(.*)$")
--         time       command

  -- if a match (first few lines won't) check for CPU threshold
  if pid then
    cpu = tonumber (cpu)
    if cpu >= THRESHOLD then
      table.insert (t, string.format ("%s (%.1f%%)", command, cpu))
    end -- if
  end -- if

end -- for loop

f:close()

-- if any over the limit, alert us
if #t > 0 then
  os.execute ('zenity --title="CPU usage warning!" --info ' ..
              '--text="These processes are using more than ' ..
              THRESHOLD .. '% CPU:\n' ..
              table.concat (t, ", ") ..
              '" --ok-label="OK" ' ..
              '--timeout=60 ' ..   -- close dialog after one minute in case we aren't around
              '--display=:0.0 '  -- ensure visible when running under cron
              )
end -- if

0
23.04.2019, 14:04
2 ответа

Ниже приведены подробные сведения об устранении этой проблемы. Согласно официальной документации

A minimal installation's %packages section which will also configure the firewall 
will look similar to the following:

%packages
@Core
authconfig
system-config-firewall-base

в моем случае authconfigотсутствовал.

Во-вторых, следуйте рекомендациям @GracefulRestart для правильного синтаксиса

0
28.01.2020, 02:40

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

firewall --enabled --service=ssh --service=glusterfs --service=tftp --service=ntp

Я не могу вспомнить, можно ли использовать расширение bash в кикстарте, но это будет выглядеть близко к тому, что у вас было изначально:

firewall --enabled --service={ssh,glusterfs,tftp,ntp}

1
28.01.2020, 02:40

Теги

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