네트워크 관리자를 사용하지 않고 자동으로 WiFi를 활성화하는 스크립트가 있었지만 시스템이 부팅되는 동안 스크립트를 루트로 실행하는 방법을 모르겠습니다. 부팅하는 동안 스크립트가 자동으로 실행되도록하려면 어떻게합니까?
네트워크 관리자를 사용하지 않고 자동으로 WiFi를 활성화하는 스크립트가 있었지만 시스템이 부팅되는 동안 스크립트를 루트로 실행하는 방법을 모르겠습니다. 부팅하는 동안 스크립트가 자동으로 실행되도록하려면 어떻게합니까?
답변:
실행할 스크립트를 /etc/init.d 디렉토리에 놓고 스크립트를 실행 가능하게하십시오.
chmod 755 myscript
완료되면 사용하려는 실행 레벨 디렉토리에 기호 링크를 작성하십시오 (예 : Ubuntu의 기본 실행 레벨 인 그래픽 실행 레벨 2에서 프로그램을 실행하려는 경우 /etc/rc2.d
디렉토리에 배치 함) . 디렉토리를 배치 할 수 없으며 "S"로 시작을 표시하여 실행시기를 지정해야하며 실행 순서가 중요합니다. 더 높은 번호를 부여하여 디렉토리에있는 다른 모든 항목 뒤에 배치하십시오.
마지막으로 실행할 스크립트가 있고 rc.local
이름이 지정된 S99rc.local
경우 스크립트를로 추가해야합니다 S99myscript
.
ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
이전 버전과 호환되는 각 /etc/rc*.d
디렉토리에는 디렉토리에 대한 심볼릭 링크가 /etc/init.d/
있습니다.
/etc/rc2.d
대신 을 사용해야했습니다 rc3.d
. 그것은 보인다 rc2.d
단지 그래픽 실행 수준이 아니다.
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.d
/etc/rc?.d
기본 런레벨에 해당 하는 디렉토리로 이동합니다.
rc.local
이름이 지정된 S99rc.local
경우 스크립트를 S99myscript
." 로 추가해야합니다 . "마지막으로 실행할 스크립트가 있고 myscript
이름이 지정된 S99myscript
경우 스크립트를으로 추가해야합니다 S99myscript
."???
에 명령을 포함시킵니다 /etc/rc.local
. 사용자의 실행 수준이 변경 될 때마다 실행됩니다.
참고 : "exit 0"을 포함하는 /etc/rc.local의 마지막 행 앞에 명령을 넣어야합니다.
/etc/rc.local
을 포함 하는 마지막 행 앞에 명령을 넣어야합니다 . exit 0
/etc/rc.local
우분투에서 15.10은 "이 스크립트는 각 멀티 유저 실행 레벨의 끝에서 실행됩니다." 부팅하는 동안 스크립트를 여러 번 실행할 수 있습니다.
crontab
재부팅 후 스크립트를 실행 하려면 옵션을 사용하십시오.
cron에@reboot
코드를 추가하여 할 수 있습니다
루트 사용자로 crontab을여십시오.
$ sudo crontab -e
맨 아래에 다음 레코드를 추가하십시오.
@reboot yourScriptPath
그것은 당신이 원하는 것을 할 것입니다.
crontab -e
수퍼 유저 권한이 필요없는 command를 사용 했습니까 ? 루트로 실행 해야하는 스크립트를 실행할 수 있는지 궁금합니다.
sudo crontab -e
시작하는 동안 스크립트를 루트로 실행하려면 명령 을 실행하는 동안 행을 추가해야합니다 .
/var/run/crond.reboot
, 그렇지 않은 경우 작업을 실행하지 않습니다
이것은 우분투 17.04에서 나를 위해 일했습니다.
disable_cdrom
편리한 위치에있는 것과 같이 둘러보기 스크립트 파일을 만듭니다 . 내 경우에는 home/yterle/disable_cdrom
. 나의 경우에는:
#!/bin/sh
eject /dev/sr0 -i 1
그것을 실행 가능하게 만드십시오 chmod 775 disable_cdrom
/etc/systemd/system
작성 service
하십시오. 예를 들어sudo gedit /etc/systemd/system/disable_cdrom.service
내 disable_cdrom.service
모습은 다음과 같습니다.
[Unit]
Description=Disable cdrom
[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom
[Install]
WantedBy=multi-user.target
어디 ExecStart
하여 스크립트를 실행 가리키는/bin/sh
그런 다음 시스템 systemctl enable disable_cdrom.service
서비스를 사용하도록 실행 하십시오.
systemctl enable disable_cdrom.service
/etc/init.d/
실행 파일 권한으로 스크립트 파일을 포함 시킨 다음 다른 실행 레벨을 설정하십시오.
$ update-rc.d script-name default
부팅시 스크립트가 시작됩니다.
update-rc.d script-name enable
?
스크립트를 추가 할 때주의하십시오. 스크립트 rc.local
때문에 스플래시 화면이 멈췄습니다. Alt+를 누르면 F1스플래시 화면 뒤에서 무슨 일이 있었는지 알 수 있습니다 (스크립트 rc.local
가 실행 중임).
나는 그것을 벗어날 수 없었다.
아무것도 작동하지 않습니다.
USB Ubuntu 이미지로 부팅하고 찾기 rc.local
하고 파일을 만들고 권한을 부여해야했습니다. 당신이하고있는 일을 모른다면 당신이하는 일을하지 말아야한다고 생각합니다.
autostart
매니페스트 또는에서*.service
뿐만 아니라 같이 여러 위치에있는 파일init.d
이나crontab
. 다음을 참조하십시오 : unix.stackexchange.com/a/525845/43233