ทำการเปลี่ยนแปลง sysctl เมื่อเริ่มต้น


1

ฉันต้องการเปลี่ยนการตั้งค่าเริ่มต้น smb เมื่อเริ่มต้นเพื่อลบการหมดเวลา ฉันมีสคริปต์ดังต่อไปนี้

#!/bin/sh

sysctl net.smb.fs.kern_deadtimer=0
sysctl net.smb.fs.kern_hard_deadtimer=0
sysctl net.smb.fs.kern_soft_deadtimer=0

การรันสคริปต์นี้ด้วยการsudoตั้งค่าตัวเลือกเคอร์เนลที่เกี่ยวข้องอย่างถูกต้อง ดังนั้นฉันรู้ว่าคำสั่งเหล่านี้ถูกต้อง

ฉันสร้าง LaunchDaemon ต่อไปนี้/Library/LaunchDaemons/เพื่อลองและเรียกใช้สคริปต์นี้เมื่อเริ่มต้น

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.jo.sysctl</string>
    <key>Disabled</key>
    <false/>
    <key>UserName</key>
    <string>admin</string>
    <key>GroupName</key>
    <string>staff</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/admin/scripts/sysctl.sh</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

ฉันตรวจสอบรายละเอียดplutilแล้วและตรวจสอบตกลง ฉันได้ตั้งสิทธิ์บนเชลล์สคริปต์ไป0755และการตั้งค่าความเป็นเจ้าของของไฟล์ plist root:wheelไป

วิ่ง

sudo launchctl load /Library/LaunchDaemons/com.jo.sysctl.plist

... ไม่ทำอะไรเลย ค่าเริ่มต้นยังคงตั้งค่าไม่ถูกต้อง ฉันจะไปไหนผิด

ขอบคุณ


sysctlคุณอาจต้องการที่จะใช้เส้นทางทั้ง
อัลลัน

/private/etc/sysctl.conf ควรทำงานใน High Sierra! ( man sysctl.conf)
klanomath

@ อัลลัน/Users/admin/scripts/sysctl.shเป็นเส้นทางทั้งหมดหรือไม่
แจ็ค Westmore

2
หากต้องการดูว่าเกิดอะไรขึ้นให้ผนวกสิ่งต่อไปนี้กับแต่ละsysctlคำสั่ง - 2>&1 >> /Users/admin/myscript.log ดังนั้นคำสั่งของคุณควรเป็น/usr/bin/sysctl net.smb.fs.kern_deadtimer=0 2>&1 >> /Users/admin/myscript.log วิธีนี้คุณสามารถดูข้อความและข้อความแสดงข้อผิดพลาดที่ถูกสร้างขึ้นถ้ามี
อัลลัน

1
* .deadtimer ล้วนเป็น "sysctl: ไม่รู้จัก oid * .deadtimer" ในสภาพแวดล้อม High Sierra ของฉัน IE ไม่มีอยู่จริง!
klanomath

คำตอบ:


4

อาจเป็นการดีที่สุดที่จะใช้วิธีเขียนสคริปต์และใช้ไฟล์การตั้งค่าที่ออกแบบมาเพื่อจุดประสงค์นี้: sysctl.conf

สิ่งนี้ใช้ได้กับ macOS 10.12 Sierra
ตามที่ @ klanomath ชี้ให้เห็นในความคิดเห็น: "* .deadtimer ล้วน แต่เป็น" sysctl: ไม่ทราบ oid * .deadtimer "ในสภาพแวดล้อม High Sierra ของฉัน IE ไม่มีอยู่จริง!"
ดูเหมือนว่าส่วนหนึ่งของส่วนต่อประสาน sysctl นั้นจะหายไปทั้งหมด

sudo nano  /private/etc/sysctl.conf

เพิ่มตัวแปรต่อไปนี้:

net.smb.fs.kern_deadtimer=0
net.smb.fs.kern_hard_deadtimer=0
net.smb.fs.kern_soft_deadtimer=0

หากคุณหลังจากนั้นบูตในโหมด verbose ( cmd+ vเมื่อเริ่มต้นหรือsudo nvram boot-args="-v"ก่อนที่จะรีบูต) คุณควรเห็นการตั้งค่าแบบกำหนดเองที่ใช้

จากนั้นคุณควรเห็นข้อความบูตเช่นนี้

net.smb.fs.kern_deadtimer: 60 -> 0
net.smb.fs.kern_hard_deadtimer: 600 -> 0
net.smb.fs.kern_soft_deadtimer: 30 -> 0

มิฉะนั้นตรวจสอบด้วย

sysctl -a | grep smb

วิธีการนี้ควรทำงานสำหรับการตั้งค่าส่วนใหญ่ที่สามารถเข้าถึงได้ผ่านทาง sysctl และจะเป็นแบบทั่วไปตามที่แสดงถึงคำถาม


ในความคิดเห็นผู้ปฏิบัติการกล่าวว่าพวกเขาลองใช้วิธีนี้ แต่ก็ไม่ได้ผล
อัลลัน

ต้นไม้ net.smb. * ทั้งหมดหายไป ดังนั้นฉันจึงอยากจะเขียน "สถานะเคอร์เนลหายไป" กว่า "ส่วนหนึ่งของอินเทอร์เฟซ sysctl นั้นหายไปอย่างสมบูรณ์" ;-)
klanomath

ฉันกำลังทดสอบเครื่องที่ใช้ macOS Sierra และ High Sierra การรันsysctl -a | grep smbจะส่งคืนเอาต์พุตเดียวกัน ดังนั้นฉันไม่แน่ใจว่าถูกต้องหรือไม่ที่จะยืนยันว่า "อินเทอร์เฟซ sysctl หายไปอย่างสมบูรณ์แล้ว" ในการทดสอบของฉันฉันสังเกตเห็นว่าการอ้างอิงทั้งหมดของ smb * หายไปหลังจากฉันเริ่มทำการเปลี่ยนแปลงกับ /etc/sysctl.conf และรีบูต อย่างไรก็ตามการตั้งค่าเดียวกันจะปรากฏขึ้นอีกครั้งทันทีที่ฉันเปิดการเชื่อมต่อ smb ...
แจ็ค Westmore มอร์

อันที่จริงผมเชื่อว่าเหตุผลที่สร้าง / แก้ไข/etc/private/sysctl.confไม่ได้ทำงานเป็นเพราะบริการ SMB ไม่เริ่มจนกว่าคุณจะเริ่มการเชื่อมต่อ SMB (ผมเชื่อว่า ... )
แจ็ค Westmore

0

ฉันพบวิธีอื่นในการทำสิ่งนี้ในที่สุด

เคล็ดลับคือการตั้งค่าการหมดเวลาเริ่มต้นที่นานขึ้น/etc/nsmb.confเช่น:

[default]
max_resp_timeout=1000     # default is 30 which way too low!

ขอบคุณทุกคนสำหรับความช่วยเหลือของคุณ :-)

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