systemd의 시작 스크립트를 작성하는 방법


233

랩탑에 2 개의 그래픽 카드가 있습니다. 하나는 IGP이고 다른 하나는 이산입니다.

개별 그래픽 카드를 끄는 쉘 스크립트를 작성했습니다.

시작할 때 스크립트를 시스템 스크립트로 변환하여 실행하려면 어떻게해야합니까?

답변:


332

이를 위해 주로 두 가지 접근 방식이 있습니다.

  • 스크립트를 실행해야하는 경우 스크립트를 변환하지 않고 systemd서비스 를 통해 스크립트를 실행하십시오 .

따라서 스크립트와 .service파일 (단위 구성 파일)의 두 파일이 필요 합니다.
스크립트가 실행 가능하고 첫 번째 줄 ( shebang )이 있는지 확인하십시오 #!/bin/sh. 그런 다음 .service파일을 /etc/systemd/system일반 텍스트 파일로 작성하십시오 vgaoff.service.
예를 들면 다음과 같습니다.

  1. 스크립트 : /usr/bin/vgaoff
  2. 단위 파일 : /etc/systemd/system/vgaoff.service

이제 단위 파일을 편집하십시오. 내용은 스크립트 작동 방식에 따라 다릅니다.

만약 vgaoffGPU를, 예를 들면 오프 정당한 권력은 :

exec blah-blah pwrOFF etc 

내용은 다음과 vgaoff.service같아야합니다.

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff

[Install]
WantedBy=multi-user.target

vgaoffGPU 전원을 끄고 다시 켜는 데 사용되는 경우 : 예 :

start() {
  exec blah-blah pwrOFF etc
}

stop() {
  exec blah-blah pwrON etc
}

case $1 in
  start|stop) "$1" ;;
esac

내용은 다음과 vgaoff.service같아야합니다.

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • 가장 사소한 경우에는 스크립트를 사용하지 않고 특정 명령을 직접 실행할 수 있습니다.

전원을 끄려면 :

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"

[Install]
WantedBy=multi-user.target

전원을 껐다 켜려면

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

파일을 다 사용한 후에는 서비스를 활성화하십시오 :

systemctl enable vgaoff.service

다음 부팅시 자동으로 시작됩니다. 한 번에 서비스를 활성화하고 시작할 수도 있습니다.

systemctl enable --now vgaoff.service

현재의 systemd v.220(이전의 설정을 수동으로 시작해야합니다).
자세한 내용은 systemd.service매뉴얼 페이지를 참조 하십시오.


문제 해결 .
여기에서 시작하십시오 : 서비스의
전체 로그를 보는 방법은 systemd무엇입니까?
systemd서비스 종료 코드 및 상태 정보 설명


자세한 답변을 주셔서 감사합니다. 이 스크립트에는 "echo OFF> / sys / kernel / debug / vgaswitcheroo / switch"명령이 포함되어 있습니다
Sharique

다음 메시지와 함께 실패합니다. vgaoff.service-전원 끄기 GPU로드 됨 :로드 됨 (/usr/lib/systemd/system/vgaoff.service; 활성화 됨) 활성 : 실패 (결과 : 종료 코드) 2012 년 9 월 11 일 23 일 이후 : 46:46 +0530; 30 초 전 프로세스 : 5258 ExecStart = / usr / lib / systemd / scripts / vgaoff (code = exited, status = 203 / EXEC) CGroup : name = systemd : /system/vgaoff.service
Sharique

죄송합니다. 다시 한 번,이 작은 것을 놓쳤습니다. 제대로 작동합니다. 다시 감사합니다.
Sharique

5
@Bazon-이 논리에 따르면이 사이트에 대한 수천 개의 답변은 경험이없는 사용자에게 "잠재적 인 함정"입니다. echo SOMETHING > /some/file시스템에서 작업을 실행하기 전에 CLI의 기본 사항에 익숙해 지거나 실제로 어떤 명령 을 수행하는지 알지 못하거나 완전히 이해하지 못하는 사람들 . 참고로, 참고 로 여러 노트북 모델에서 dGPU를 끄는 방법을 읽고 거기에 사용 된 명령이 제안한 것과 다른 것으로 대체 될 수 있는지 확인하십시오. 또한 원본 파일을 복원하려면 일반적으로 파일을 소유 한 패키지를 다시 설치하십시오.
don_crissti

4
트윗 담아 가기 팁 고마워. (오해의 소지가있는 정보의 전파를 피하기 위해 원래 의견을 삭제했습니다.)
Woodrow Barlow
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.