Перенаправьте и stderr и stdout к/dev/null с/bin/sh

О, но cgroups легки :) Установите libcgroup пакет. Создайте/etc/cgconfig.conf:

mount {
    cpu     = /cgroup/cpu_and_mem;
    cpuacct = /cgroup/cpu_and_mem;
    memory  = /cgroup/cpu_and_mem;
}

group sshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

group nosshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

Запустите cgconfig процесс, который создаст иерархию, cgroups, и установит пределы. Если это успешно выполняется, у Вас есть два cgroups, оба из которых имеют 50% присвоенного ЦП и 1G доступной памяти (не знают, каков Ваш фактический объем доступной памяти; принятие это - 2G в этом примере). Теперь просто необходимо переместить все задачи (т.е. все процессы, работающие на системе) от корневой группы в nosshd cgroup:

cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks

Затем просто необходимо получить PID sshd процесс и перемещение это информация sshd файл задач:

cgroup]# echo $PID >> sshd/tasks

Ta-da, Вы сделаны. Можно теперь пребывать в уверенности, что sshd будет всегда иметь 50% ЦП и 1G памяти.

64
02.01.2018, 13:59
1 ответ

Это будет работать в любой Posix-совместимой оболочке:

ls good bad >/dev/null 2>&1

Необходимо перенаправить stdout сначала прежде, чем копировать его в stderr; при дублировании его сначала stderr просто укажет на то, на что первоначально указал stdout.

Bash, zsh и некоторые другие оболочки также обеспечивают ярлык

ls good bad &>/dev/null

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

106
27.01.2020, 19:32
  • 1
    Действительно, я прочитал руководство оболочки ручья. Это указало этому более поздние версии /bin/sh реализовали &>/dev/null синтаксис, по-видимому, не так или у меня есть более старая версия (который я не могу повторить всегда, рабочий OpenBSD 5.3 tho так должен быть достаточным) –  Torxed 25.06.2013, 22:29
  • 2
    @Torxed, OpenBSD sh основан на pdksh. В наше время больше нет Оболочки Bourne. csh представленный >& также доступный в zsh. bash выбрал &> (теперь также поддерживаемый zsh и некоторые pdksh производные), хотя это ясно повреждает соответствие POSIX с тех пор foo &> file совершенно допустимый синтаксис POSIX, что означает что-то совершенно другое. –  Stéphane Chazelas 25.06.2013, 22:42
  • 3
    @StéphaneChazelas (...), что означает что-то совершенно другое, Вы оставили меня задающийся вопросом, что это означает в этом случае... :) –  Piotr Dobrogost 09.12.2014, 15:52
  • 4
    @PiotrDobrogost, foo &> file похож foo & > file или foo & : > file, это - выполненное нечто в фоне и открытом файле для записи ни для какой команды вообще (вряд ли, чтобы использоваться как этот). –  Stéphane Chazelas 09.12.2014, 15:59
  • 5
    @PiotrDobrogost, >& не идеально ни один, поскольку это конфликтует с >&2, >&- операторы. zsh добавленный это для удобства для csh пользователей (csh не имеет >&2). Они - просто синтаксический сахар, просто используют > file 2>&1 который является стандартным и портативным (к подобным Границе оболочкам). –  Stéphane Chazelas 09.12.2014, 16:26

Теги

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