การแม็พของ systemd จะ จำกัด ulimit
Directive ulimit equivalent Unit
LimitCPU= ulimit -t Seconds
LimitFSIZE= ulimit -f Bytes
LimitDATA= ulimit -d Bytes
LimitSTACK= ulimit -s Bytes
LimitCORE= ulimit -c Bytes
LimitRSS= ulimit -m Bytes
LimitNOFILE= ulimit -n Number of File Descriptors
LimitAS= ulimit -v Bytes
LimitNPROC= ulimit -u Number of Processes
LimitMEMLOCK= ulimit -l Bytes
LimitLOCKS= ulimit -x Number of Locks
LimitSIGPENDING= ulimit -i Number of Queued Signals
LimitMSGQUEUE= ulimit -q Bytes
LimitNICE= ulimit -e Nice Level
LimitRTPRIO= ulimit -r Realtime Priority
LimitRTTIME= No equivalent
หาก ulimit ถูกตั้งค่าเป็น 'unlimited' ให้ตั้งเป็น 'infinity' ใน systemd config
ulimit -c unlimited
เหมือนกันเหมือนLimitCORE=infinity
ulimit -v unlimited
กันกับLimitAS=infinity
ulimit -m unlimited
เหมือนกันLimitRSS=infinity
ดังนั้นการกำหนดค่าครั้งสุดท้ายจะมีลักษณะ
[Unit]
Description=Apache Solr
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
WorkingDirectory=/opt/solr/server
User=solr
Group=solr
LimitAS=infinity
LimitRSS=infinity
LimitCORE=infinity
LimitNOFILE=65536
ExecStart=/opt/solr/bin/solr-foo
Restart=on-failure
SuccessExitStatus=143 0
SyslogIdentifier=solr
[Install]
WantedBy=multi-user.target
ในกรณีนี้โดยเฉพาะฉันไม่ทราบเส้นทาง java แบบเต็ม (เนื่องจากการเปลี่ยนแปลงขึ้นอยู่กับประเภทเซิร์ฟเวอร์) และ systemd ไม่มีความสุขเกี่ยวกับเส้นทางสัมพัทธ์ฉันจึงตัดคำสั่ง java ในสคริปต์ทุบตีแบบง่ายๆที่อยู่ที่ /opt/solr/bin/solr-foo
#!/bin/bash
. /opt/solr/bin/solr.in.sh
# Load $JAVA_HOME from 1 of 2 places where it could be defined
# Last one wins
if [[ -f "/etc/profile.d/jdk.sh" ]]; then
. /etc/profile.d/jdk.sh
fi
if [[ -f "/etc/profile.d/zing.sh" ]]; then
. /etc/profile.d/zing.sh
fi
exec ${JAVA_HOME}/bin/java -server \
-Djetty.port=${SOLR_PORT} \
${SOLR_JAVA_MEM} \
${GC_TUNE} \
${GC_LOG_OPTS} \
-DzkClientTimeout=${ZK_CLIENT_TIMEOUT} \
-DzkHost=${ZK_HOST} \
-DSTOP.PORT=7900 \
-DSTOP.KEY=foobar \
-Dhost=${SOLR_HOST} \
-Duser.timezone=${SOLR_TIMEZONE} \
-Djetty.home=/opt/solr/server \
-Dsolr.solr.home=${SOLR_HOME} \
-Dsolr.install.dir=/opt/solr \
-Dlog4j.configuration=file:/var/solr/log4j.properties \
-Xss256k \
-Dbootstrap_conf=true \
-Dbootstrap_confdir=/opt/solr/server/solr/configsets/foobar/conf \
-Dcollection.configName=foobar \
-jar start.jar --module=http
man 5 systemd.exec
ในการ