시작시 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하면 관련 커널 옵션이 올바르게 설정됩니다. 그래서 나는이 명령이 올바른 명령이라는 것을 알고 있습니다.

시작시이 /Library/LaunchDaemons/스크립트를 실행하기 위해 다음 LaunchDaemon을 만들었습니다 .

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

plist를 plutil확인하고 확인을 확인합니다. 쉘 스크립트에 대한 권한을 0755설정하고 plist 파일의 소유권을로 설정했습니다 root:wheel.

달리는

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

... 아무것도하지 않습니다. 기본값은 여전히 ​​잘못 설정되어 있습니다. 내가 어디로 잘못 가고 있니?

감사


에 대한 전체 경로를 사용하고 싶을 것입니다 sysctl.
Allan

/private/etc/sysctl.conf는 여전히 High Sierra에서 작동합니다! ( man sysctl.conf)
klanomath

@Allan /Users/admin/scripts/sysctl.sh은 전체 경로입니까?
잭 웨스트 모어

2
무슨 일이 일어나고 있는지 확인하려면 각 sysctl명령에 다음을 추가하십시오. 2>&1 >> /Users/admin/myscript.log 따라서 명령 은 다음과 같아야합니다. /usr/bin/sysctl net.smb.fs.kern_deadtimer=0 2>&1 >> /Users/admin/myscript.log 어떤 메시지 및 오류 메시지가 생성되는지 확인할 수 있습니다.
Allan

1
* .deadtimer는 High Sierra 환경에서 모두 "sysctl : unknown oid * .deadtimer"입니다. IE는 존재하지 않습니다!
klanomath

답변:


4

스크립트 접근 방식을 버리고이 목적으로 설계된 설정 파일을 사용하는 것이 가장 좋습니다. sysctl.conf

이는 최대 macOS 10.12 Sierra에 적용됩니다.
@ klanomath가 주석에서 지적한 것처럼 : * * .deadtimer는 High Sierra 환경에서 모두 "sysctl : unknown oid * .deadtimer"입니다. 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

이후에 상세 모드 (부트 시 또는 재부팅 전에 cmd+ )로 부팅하면 사용자 정의 설정이 적용되는 것을 볼 수 있습니다.vsudo 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을 통해 액세스 할 수있는 대부분의 설정에서 작동하므로 질문 제목에서 알 수 있듯이 일반화됩니다.


의견에서 OP는이 방법을 시도했지만 작동하지 않았다고 말했습니다.
Allan

전체 net.smb. * 트리가 사라졌습니다. "sysctl 인터페이스의 일부가 완전히 사라졌습니다"보다 "커널 상태가 없어졌습니다"라고
쓰려고합니다.

macOS Sierra 및 High Sierra를 실행하는 컴퓨터에서 테스트 중입니다. Running sysctl -a | grep smb은 동일한 출력을 반환합니다. 따라서 "sysctl 인터페이스가 완전히 사라졌습니다"라고 주장하는 것이 옳지 않습니다. 테스트에서 smb *에 대한 모든 참조가 /etc/sysctl.conf에 대한 변경을 시작한 후 재부팅 된 후 사라지는 것으로 나타났습니다. 그러나 smb 연결을 열 자마자 같은 설정이 다시 나타납니다.
Jack Westmore

실제로, 작성 / 편집 /etc/private/sysctl.conf이 작동 하지 않는 이유 는 smb 연결을 시작할 때까지 smb 서비스가 시작되지 않기 때문입니다.
잭 웨스트 모어

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.