Bagaimana Anda menetapkan suatu ulimit pada unit layanan systemd?
Pertanyaan stackoverflow ini menjelaskan bahwa systemd mengabaikan sistem ulimits
Seperti apa sintaksis yang akan mengatur ulimit berikut?
ulimit -c
ulimit -v
ulimit -m
[Unit]
Description=Apache Solr
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
SOLR_INSTALL_DIR=/opt/solr
SOLR_ENV=/etc/default/solr.in.sh
RUNAS=solr
SOLR_PID_DIR="/var/solr"
SOLR_HOME="/opt/solr/server/solr"
LOG4J_PROPS="/var/solr/log4j.properties"
SOLR_LOGS_DIR="/opt/solr/server/logs"
SOLR_PORT="8389"
PIDFile=/var/solr/solr-8389.pid
ExecStart=/opt/solr/bin/solr start
ExecStatus=/opt/solr/bin/solr status
ExecStop=/opt/solr/bin/solr stop
Restart=on-failure
User=solr
SuccessExitStatus=143 0
[Install]
WantedBy=multi-user.target
man 5 systemd.exec
.Jawaban:
Pemetaan systemd membatasi untuk ulimit
Jika suatu ulimit diatur ke 'tidak terbatas', aturlah ke 'tak terbatas' dalam konfigurasi systemd
ulimit -c unlimited
adalah sama denganLimitCORE=infinity
ulimit -v unlimited
samaLimitAS=infinity
ulimit -m unlimited
adalah sama denganLimitRSS=infinity
Jadi konfigurasi terakhir akan terlihat seperti
Dalam kasus khusus ini, saya tidak tahu path java penuh (karena itu berubah berdasarkan jenis server), dan systemd tidak senang tentang path relatif, saya membungkus perintah java dalam skrip bash sederhana yang terletak di
/opt/solr/bin/solr-foo
sumber
RUNAS
danSOLR_ENV
baik diperbaiki atau dihapus. Dan kemudian ada semua kehebohan dalambin/solr
skrip shell yang sama sekali tidak perlu di bawah manajer layanan.bin/solr
skrip yang kembung .exec
dalam skrip shell.