Как выполнить мерзавца как демона на Солярисе (SmartOS)

Не уверенный в специфических особенностях Perl, но на других динамических языках, таких как Python Вы получили бы сбой выделения памяти и последующий катастрофический отказ Вашей программы. Некоторые языки (включенный Python) позволяют Вам устанавливать обработчик для условия, Perl, вероятно, делает то же.

Я не уверен, где Вы получаете идею, что malloc ожидает, когда он не может выделить память, реализацию на Linux или возвращает указатель или ПУСТОЙ УКАЗАТЕЛЬ, если запрос перестал работать.

Ситуация на Linux является сложной далее тем, что Linux позволяет сверхвыделение памяти по умолчанию. Например, если Ваша система имеет 4 ГБ в наличии виртуальной памяти, эй может иметь несколько процессов, выделяют почти 4 ГБ памяти. Это пока они грязно выделение, что память на самом деле используется. Если несколько процессов закончат тем, что делали это, то они исчерпают фактическую доступную память, и Из уничтожающего процесса Памяти втолкнет и уничтожит некоторые процессы.

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

4
задан 16 March 2014 в 04:51
1 ответ

OK, so I found a problem in my SMF config XML. If anyone would benefit from this, here's the working solution:

/usr/local/bin/start-stop-git.sh

#!/sbin/sh

GITCOMMAND="git daemon --base-path=/my/git/repo --export-all --enable=receive-pack --reuseaddr"

startcmd () {
    `$GITCOMMAND`
}

stopcmd () {
    pkill -f "git *"
}

case "$1" in
'start')
        startcmd
        ;;
'stop')
        stopcmd
        ;;
'restart')
        stopcmd
        sleep 1
        startcmd
        ;;
*)
        echo "Usage: $0 { start | stop | restart }"
        exit 1
        ;;
esac

git-server.xml:

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="manifest" name="git-server">
  <service name="site/git-server" type="service" version="1">
  <create_default_instance enabled="true"/>
  <single_instance/>
  <dependency name="network" grouping="require_all" restart_on="refresh" type="service">
    <service_fmri value="svc:/milestone/network:default"/>
  </dependency>
  <dependency name="filesystem" grouping="require_all" restart_on="refresh" type="service">
    <service_fmri value="svc:/system/filesystem/local"/>
  </dependency>

  <method_context working_directory="/develop">
    <method_credential user="admin" group="staff" privileges='basic,net_privaddr'  />
    <method_environment>
      <envvar name="PATH" value="/opt/local/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin"/>
      <envvar name="HOME" value="/develop"/>
    </method_environment>
  </method_context>

  <exec_method
    type="method"
    name="start"
    exec="/usr/local/bin/start-stop-git.sh start"
    timeout_seconds="60"/>

  <exec_method
    type="method"
    name="stop"
    exec="/usr/local/bin/start-stop-git.sh stop"
    timeout_seconds="60"/>

  <property_group name="startd" type="framework">
    <propval name="duration" type="astring" value="child"/>
    <propval name="ignore_error" type="astring" value="core,signal"/>
  </property_group>

  <property_group name="application" type="application">
  </property_group>

  <stability value="Evolving"/>

  <template>
    <common_name>
      <loctext xml:lang="C">git server service</loctext>
    </common_name>
  </template>
  </service>
</service_bundle>

To install and verify:

#svccfg import git-server.xml
#svcadm enable git-server
#svcs -xv

The last command should not print anything if system is healthy.

3
ответ дан 3 December 2019 в 03:43

Теги

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