Nehmen Sie beim Start sysctl-Änderungen vor

Ich möchte die Standard-SMB-Einstellungen beim Start ändern, um Zeitüberschreitungen zu entfernen. Ich habe das folgende Skript;

#!/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

Das Ausführen dieses Skripts mit sudosetzt die relevanten Kernel-Optionen korrekt. Ich weiß also, dass diese Befehle die richtigen sind.

Ich habe den folgenden LaunchDaemon erstellt, um /Library/LaunchDaemons/zu versuchen, dieses Skript beim Start auszuführen.

<?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>

Ich habe die Plist mit überprüft plutilund sie ist in Ordnung. Ich habe die Berechtigungen für das Shell-Skript auf 0755und den Besitz der Plist-Datei auf festgelegt root:wheel.

Betrieb

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

...tut nichts. Die Standardwerte sind immer noch falsch eingestellt. Wo gehe ich falsch?

Danke

Sie möchten wahrscheinlich den gesamten Pfad zu verwenden sysctl.
/private/etc/sysctl.conf sollte immer noch in High Sierra funktionieren! ( man sysctl.conf)
@Allan /Users/admin/scripts/sysctl.shist der ganze Pfad?
@klanomath Ich habe das vor der LaunchDaemon-Option versucht, aber es hat nicht funktioniert! Denken Sie, dass es nicht funktioniert, weil sysctl die smb-Parameter nicht setzt, bis die erste smb-Verbindung hergestellt wird, und dann standardmäßig auf die üblichen (beschissenen) eingestellt wird. Würde mich jedoch über jeden Hinweis zu diesem Punkt freuen.
Nein, nicht Ihr Skript, sondern der Pfad zum Befehl sysctl -/usr/bin/sysctl
@Allan Ich habe das Skript geändert, aber das hat nicht funktioniert. Danke für den Vorschlag.
Um zu sehen, was passiert, hängen Sie Folgendes an jeden sysctlBefehl an - 2>&1 >> /Users/admin/myscript.log Ihr Befehl sollte also lauten /usr/bin/sysctl net.smb.fs.kern_deadtimer=0 2>&1 >> /Users/admin/myscript.log. Auf diese Weise können Sie sehen, welche Meldung und Fehlermeldung ggf. generiert werden.
*.deadtimer sind alle "sysctl: unknown oid *.deadtimer" in meiner High Sierra Umgebung. IE sie existieren nicht!

Antworten (2)

Es ist wahrscheinlich am besten, den Skriptansatz aufzugeben und die für diesen Zweck vorgesehene Einstellungsdatei zu verwenden: sysctl.conf

Dies gilt bis macOS 10.12 Sierra.
wie @klanomath in Kommentaren betonte: " *.deadtimer sind alle "sysctl: unknown oid *.deadtimer" in meiner High Sierra-Umgebung. IE sie existieren nicht!"
Es sieht also so aus, als ob dieser Teil der sysctl-Schnittstelle jetzt vollständig verschwunden ist.

sudo nano  /private/etc/sysctl.conf

fügen Sie die folgenden Variablen hinzu:

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

Wenn Sie danach im ausführlichen Modus booten ( cmd+ vbeim Start oder sudo nvram boot-args="-v"vor einem Neustart), sollten Sie sehen, dass die benutzerdefinierten Einstellungen angewendet werden.

Sie sollten dann beim Booten Meldungen wie diese sehen:

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

Ansonsten erkundigen Sie sich bei

sysctl -a | grep smb

Dieser Ansatz sollte für die meisten Einstellungen funktionieren, auf die über sysctl zugegriffen werden kann, und daher so allgemein sein, wie der Titel der Frage impliziert.

In den Kommentaren sagte das OP, dass sie diese Methode ausprobiert haben und sie nicht funktioniert hat.
Der gesamte net.smb.*-Baum verschwand. Also würde ich lieber schreiben "die Kernel-Zustände sind weg" als "dieser Teil der sysctl-Schnittstelle ist komplett weg" ;-)
Ich teste auf Computern mit macOS Sierra und High Sierra. Running sysctl -a | grep smbgibt die gleiche Ausgabe zurück. Ich bin mir also nicht sicher, ob es richtig ist zu behaupten, dass "die sysctl-Schnittstelle jetzt vollständig weg ist". Bei meinen Tests bemerkte ich, dass alle Verweise auf smb* verschwanden, nachdem ich begonnen hatte, Änderungen an /etc/sysctl.conf vorzunehmen und neu zu starten. Die gleichen Einstellungen würden jedoch wieder angezeigt, sobald ich eine SMB-Verbindung geöffnet habe ...
Tatsächlich glaube ich, dass der Grund, warum das Erstellen/Bearbeiten /etc/private/sysctl.confnicht funktioniert, darin besteht, dass der smb-Dienst nicht gestartet wird, bis Sie eine smb-Verbindung initiieren (glaube ich ...) .

Ich habe am Ende einen anderen Weg gefunden, dies zu tun.

Der Trick bestand darin, einen längeren Standard-Timeout-Wert wie folgt festzulegen /etc/nsmb.conf:

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

Danke an alle für eure Hilfe :-)