ทำให้ ulimits ทำงานกับ start-stop-daemon


20

ฉันมีinit.dสคริปต์ที่เริ่มใช้แอstart-stop-daemon --chuid SOME_SYSTEM_USERพ นั่นคือแอปทำงานภายใต้ผู้ใช้อื่นไม่ใช่รูท

ปัญหาคือ app ที่ต้องการการตั้งค่าการ จำกัด พิเศษ (คือulimit -n 64000) limits.confซึ่งผมตั้งอยู่ใน มันใช้งานได้ดีมากเมื่อฉันเรียกใช้โดยตรงจาก shell: su - SOME_SYSTEM_USER+ เริ่ม app จาก shell

แต่เมื่อเรียกใช้ผ่านstart-stop-daemon --chuidจาก/etc/init.dข้อ จำกัด เหล่านี้จะถูกละเว้น จากนั้นแอปจะไม่ทำงานอย่างเห็นได้ชัด

ฉันจะบังคับstart-stop-daemonให้เคารพการulimitตั้งค่าได้อย่างไร


Debian Squeeze, 2.6.32-5-686 # 1 SMP วันเสาร์ที่ 5 พฤษภาคม 01:33:08 UTC 2012 i686 GNU / Linux

คำตอบ:


23

ในเวลานี้คุณทำไม่ได้ limits.conf(5)คือการกำหนดค่าสำหรับpam_limits(8)ซึ่งจะเปิดใช้งานโดยสแต็ค PAM /etc/pam.dตามการตั้งค่าใน อย่างไรก็ตามstart-stop-daemon(8)เมื่อเปิดตัวจากสคริปต์ init.d จะไม่ส่งผ่าน PAM stack ดังนั้นการตั้งค่าเหล่านี้จะไม่ถูกนำไปใช้

Debian bug # 302079มีโปรแกรมแก้ไขเพื่อเปิดใช้งานการ จำกัด การตั้งค่าstart-stop-daemon(8)แต่ข้อผิดพลาดได้เปิดขึ้นตั้งแต่ปี 2005 และโปรแกรมแก้ไขยังไม่ได้รวมเข้าด้วยกัน

ในขณะที่ไม่เหมาะ AFAIK วิธีที่แนะนำในการบรรลุเป้าหมายในตอนนี้คือการเพิ่มการulimitโทรในสคริปต์ init.d ของคุณ


เพียงเพิ่มการulimitตั้งค่าก่อนstart-stop-daemonคำสั่ง (เช่นulimit -n 64000) ... สำหรับคนงมงายอย่างฉัน
Ryan Schumacher

หากแตกต่างจาก OP คุณไม่ทราบว่า daemon ใดที่ล้มเหลวฉันเพิ่งได้ผลลัพธ์ที่ดีเมื่อ Debian Wheezy เริ่มการทำงาน daemons ใหม่หลังจาก: echo "ulimit -c unlimited" | sudo tee /lib/lsb/init-functions.d/core-limit
Martin Dorey

สามารถดูข้อมูลพื้นหลังที่มีค่าเพิ่มเติมได้ที่นี่: serverfault.com/a/642082/22394
2559

7

นอกจากนี้คุณยังสามารถใช้คำสั่ง 'จำกัด ' ในสคริปต์พุ่งพรวด

ในไฟล์ /etc/init/foo.conf ให้เพิ่มบรรทัด:

limit nofile 64000 64000

64000 แรกคือขีด จำกัด ซอฟต์และอันที่สองคือขีด จำกัด ฮาร์ด

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่: http://upstart.ubuntu.com/cookbook/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.