특정 장치가 부팅되고 커널 모듈이 로드되면 init 스크립트가 트리거됩니다.

특정 장치가 부팅되고 커널 모듈이 로드되면 init 스크립트가 트리거됩니다.

내 Ubuntu 12.04 서버에서 다음을 작성해야 합니다.초기화 파일인피니밴드 인터페이스를 기다리는 중(장치:MLX4_0, 상호 작용:이브라히모비치 0) 완전히 시작될 때까지크넴커널 모듈이 로드되었습니다.

나는초기화 파일시스템이 부팅될 때까지 기다렸다가 수동으로 시작하면 스크립트가 작동 service myscript start하지만 부팅 시 정상적으로 로드하면 작동하지 않습니다. 부팅 순서를 사용하고 있습니다99, 하지만 이러한 기능이 실행될 때까지 기다려야 하기 때문에 올바르게 시작되지 않습니다.

이를 달성하기 위한 올바른 구문은 무엇입니까 init.d(커널 모듈 하나와 하나)? 뭔가 키워드가 있을 것 같은데, # Required-Start: $remote_fs $syslog $network특정 인터페이스나 커널 모듈에 맞는 키워드를 찾을 수가 없네요.

배경의 경우: init 스크립트스럼,MPI 열기그리고무제한 대역폭인터렉티브. 나는 컴파일했다스럼그리고Mellanox 인피니밴드 드라이버지원하고,MPI 열기이 버전의 SLURM에 연결하세요. 결과적으로 openMPI는 다음보다 작은 Mellanox infiniband 드라이버를 직접 사용합니다.아이팟(inifiniband를 통한 IP). 이렇게 하려면 시스템에 등록된 메모리를 사용해야 하며, 이는 다음으로 설정되어야 합니다.제한 없는.

그래서:

내 출력에 일부 logger출력을 추가했습니다.초기화 파일스크립트. 나는 모듈이 실제로 실행되고 있음을 발견했습니다. 그래서 나는 문제를 완전히 이해하지 못합니다. 이는 이상하며 일부 환경 변수가 필요하고 초기화가 아닌 전체 사용자 공간에서만 설정되는 것과 관련이 있을 수 있습니다.

문제는 다음에 설정된 메모리 잠금 제한과 관련이 있습니다./etc/security/limits.conf. 작동하게하려면 설정해야했습니다.

*             -   memlock       unlimited
root          -   memlock       unlimited

이런 식으로 slurm 데몬을 시작할 때SSH연결하면 모든 것이 잘 작동합니다. 데몬을 시작하는 init 프로세스인 경우 규칙을 고려하지 않는 것과 같습니다./etc/security/limits.conf.

답변1

init.d파일이 구체적으로 무엇인지 는 모르지만 udev장치가 추가될 때 스크립트를 실행하는 규칙은 다음과 같습니다.

ACTION=="add", ATTRS{idVendor}=="VID", ATTRS{idProduct}=="PID", RUN+="/path/to/executable"

udevadm일반적으로 장치가 추가되는 방식과 해당 모듈이 로드되는 방식에 대해 자세히 알아보려면 더 자세히 살펴봐야 합니다 . 거기에서 VID올바른 합계 값을 찾을 수도 있습니다 PID.

장치와 커널 모듈의 조합을 허용합니까?

예. 음 .. 아니야. 아마도? 이 질문에 대한 대답은 전적으로 장치에 추가하는 차단 수준에 따라 달라집니다. udev장치의 초기 감지부터 장치 전체 로드 및 초기화까지 고려해야 할 수행해야 할 작업이 많이 있습니다.위로.

그 중 일부는 다음과 같습니다:

  • 상위 버스/장치/하위 시스템에서 하드웨어의 초기 감지

  • 적절한 커널 모듈을 찾아서 로드하십시오.

  • /dev devfs적절한 장치 특수 파일로 파일 시스템을 채웁니다.

  • 현재 장치에 추가된 하위 장치를 감지하고 헹구고 반복합니다.

이러한 작업 수준 전체 또는 일부에 대한 규칙을 지정할 수 있습니다. 또한 이러한 수준의 작업이 무엇인지 실시간으로 udevadm trigger직접 확인할 수도 있습니다.monitor

자세히 살펴보시길 권해드려요이 정보좀 더 친숙해지고 싶다면.

답변2

이를 위해 Upstart 작업을 사용하십시오.

# Ensures that the device is up and filesystem is too
start on filesystem and net-device-up IFACE=ib0
stop on runlevel [016]

# Ensures that module is loaded
pre-start exec modprobe -q knem

exec /path/to/exec

관련 정보