루트로 부팅하는 동안 스크립트를 실행하는 방법


59

네트워크 관리자를 사용하지 않고 자동으로 WiFi를 활성화하는 스크립트가 있었지만 시스템이 부팅되는 동안 스크립트를 루트로 실행하는 방법을 모르겠습니다. 부팅하는 동안 스크립트가 자동으로 실행되도록하려면 어떻게합니까?


자동 시작 프로그램으로 구성되어 autostart매니페스트 또는에서 *.service뿐만 아니라 같이 여러 위치에있는 파일 init.d이나 crontab. 다음을 참조하십시오 : unix.stackexchange.com/a/525845/43233
Noam Manos

답변:


54

실행할 스크립트를 /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/있습니다.


1
Ubuntu Server 14.04에서는 예제에 표시된 /etc/rc2.d대신 을 사용해야했습니다 rc3.d. 그것은 보인다 rc2.d단지 그래픽 실행 수준이 아니다.
Brad

1
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.d/etc/rc?.d기본 런레벨에 해당 하는 디렉토리로 이동합니다.
Kevin

1
대신 : "마지막으로 실행할 스크립트가 있고 rc.local이름이 지정된 S99rc.local경우 스크립트를 S99myscript." 로 추가해야합니다 . "마지막으로 실행할 스크립트가 있고 myscript이름이 지정된 S99myscript경우 스크립트를으로 추가해야합니다 S99myscript."???
Dor

6
systemd에서는 작동하지 않습니다 (예 : Ubuntu 16.04부터). 대신 이것을 보십시오 .
Alexander Revo

26

에 명령을 포함시킵니다 /etc/rc.local. 사용자의 실행 수준이 변경 될 때마다 실행됩니다.

참고 : "exit 0"을 포함하는 /etc/rc.local의 마지막 행 앞에 명령을 넣어야합니다.


3
참고 : 다음 /etc/rc.local을 포함 하는 마지막 행 앞에 명령을 넣어야합니다 . exit 0
rubo77

3
/etc/rc.local우분투에서 15.10은 "이 스크립트는 각 멀티 유저 실행 레벨의 끝에서 실행됩니다." 부팅하는 동안 스크립트를 여러 번 실행할 수 있습니다.
jarno

각 실행 레벨에서 @jamo. 나는 이것이 "부팅시"실행과 관련이있는 방법을 전혀 모른다.
erm3nda

17

crontab재부팅 후 스크립트를 실행 하려면 옵션을 사용하십시오.

cron에@reboot 코드를 추가하여 할 수 있습니다

루트 사용자로 crontab을여십시오.

$ sudo crontab -e

맨 아래에 다음 레코드를 추가하십시오.

@reboot yourScriptPath 

그것은 당신이 원하는 것을 할 것입니다.


crontab -e수퍼 유저 권한이 필요없는 command를 사용 했습니까 ? 루트로 실행 해야하는 스크립트를 실행할 수 있는지 궁금합니다.
jarno

나는 이것을 테스트했다. 스크립트를 루트로 실행하지 않습니다.
jarno

4
sudo crontab -e시작하는 동안 스크립트를 루트로 실행하려면 명령 을 실행하는 동안 행을 추가해야합니다 .
jarno

제거하는 것을 잊지 마세요 /var/run/crond.reboot, 그렇지 않은 경우 작업을 실행하지 않습니다
알버트 카탈루냐어

기록을 위해서만 @jarno가 이미 알고 있다고 확신합니다. 각 사용자마다 고유 한 cron 작업이 있으므로 사용자가 crontab -e를 sudo없이 실행)에 추가하면 사용자가 스크립트를 실행합니다. 따라서 부팅시 스크립트를 루트로 실행할 수 있으려면 루트로 실행해야합니다.
eddieferetro

9

이것은 우분투 17.04에서 나를 위해 일했습니다.

  1. disable_cdrom편리한 위치에있는 것과 같이 둘러보기 스크립트 파일을 만듭니다 . 내 경우에는 home/yterle/disable_cdrom. 나의 경우에는:

    #!/bin/sh
    eject /dev/sr0 -i 1
  2. 그것을 실행 가능하게 만드십시오 chmod 775 disable_cdrom

  3. 파일로 이동하여 파일을 /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서비스를 사용하도록 실행 하십시오.


1
그것은 내가 무엇을 찾고 있었다,하지만 난 당신이 의미하는 생각으로 이것을 투표systemctl enable disable_cdrom.service
KennetRunner

5

/etc/init.d/ 실행 파일 권한으로 스크립트 파일을 포함 시킨 다음 다른 실행 레벨을 설정하십시오.

$ update-rc.d script-name default

부팅시 스크립트가 시작됩니다.


Kali Linux v2.0에서는 작동하지 않습니다. 당신은 의미 했습니까 update-rc.d script-name enable?
Sopalajo de Arrierez

/etc/init.d/ <script-name>에 복사 한 update-rc.d <script-name> 기본 쉘 스크립트
MS Parmar

4

다음과 같은 텍스트 파일을 작성하십시오 /etc/cron.d/.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

@reboot   root    yourScriptPath

( yourScriptPath실행하려는 스크립트의 경로로 바꿔야 합니다.)


1

스크립트를 추가 할 때주의하십시오. 스크립트 rc.local때문에 스플래시 화면이 멈췄습니다. Alt+를 누르면 F1스플래시 화면 뒤에서 무슨 일이 있었는지 알 수 있습니다 (스크립트 rc.local가 실행 중임).

나는 그것을 벗어날 수 없었다.

  • Ctrl+ Alt+ Del또는
  • Alt+ PrtSc+ K또는
  • Ctrl+ Alt+F#

아무것도 작동하지 않습니다.

USB Ubuntu 이미지로 부팅하고 찾기 rc.local하고 파일을 만들고 권한을 부여해야했습니다. 당신이하고있는 일을 모른다면 당신이하는 일을하지 말아야한다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.