Linux에서 부팅 시 Bash 스크립트를 실행하는 방법은 무엇입니까?

Linux에서 부팅 시 Bash 스크립트를 실행하는 방법은 무엇입니까?

iMX7 듀얼 개발 보드에서 Linux 4.9.11-1.0.0을 실행하고 있습니다. test.sh시작 시 실행하고 싶은 파일이 있습니다 . 현재는 echo단지 테스트 목적으로만 많은 명령문이 있습니다 .

보드의 스위치를 켜서 켜자 많은 초기화 항목이 나타나는 것을 보았습니다. 시작 시 파일 echo의 명령문이 test.sh이 초기화 시퀀스에도 표시되기를 원합니다 . 궁극적으로 이 접근 방식이 성공하면 간단한 echo설명을 실용적인 것으로 바꾸는 것이 계획입니다 . 이 시점에서는 시작 시 스크립트가 실행되는지 확인하고 싶습니다.

지금까지 파일을 생성했으며 test.sh보드 부팅 후 수동으로 실행할 수 있습니다. /etc/rc.local파일 끝의 종료 문 앞에 다음을 추가했습니다 .

sh '/home/root/test.sh'

rc.local파일이 맨 위에 있는 것을 확인했습니다 #!/bin/sh -e. 나는 또한 다음을 수행했습니다.

$ chown root /etc/rc.local
$ chmod 777 /etc/rc.local

이 모든 작업을 수행한 후 다음을 입력하여 제대로 작동하는지 확인했습니다.

$ /etc/init.d/rc.local start

지금까지 모든 것이 예상대로 작동하고 있으며 echo마지막 단계를 실행하면 명령문을 볼 수 있습니다. 그러나 보드를 재부팅하려고 하면 echo인쇄된 초기화 내용에 이러한 문이 전혀 표시되지 않습니다.

내가 무엇을 놓치고 있나요? 실제로 시작 시 실행될 수도 있지만 어떤 이유로 출력이 표시되지 않습니까?

답변1

명령 실행 과 같은 모든 작업을 완료한 경우 chmod +x /etc/rc.local볼 수 있는 어디에도 기록되지 않습니다.

이 내 꺼야 /etc/rc.local:

$ cat /etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
echo "hickory stick"

여기서는 syslog에 기록하는 수정된 Bash를 사용하고 있습니다. 이에 대해서는 다른 U&L Q&A에서 논의했습니다.bash 기록을 syslog로 보내기.

시스템이 부팅되면 Bash를 통해 기록된 다음 메시지가 표시됩니다.

/var/log/bash-log/127.0.0.1.log:2018-07-24T22:04:24.609094-04:00 centos7 rc.local: 히코리 스틱

하지만 다른 곳에서는 그렇지 않습니다. 이를 syslog/rsyslog에 기록하려면 일반적으로 logger다음 명령을 사용하여 수행합니다.

$ logger hi

/var/log/messages그런 다음 또는 또는 에서 /var/log/syslog볼 수 있습니다 journal -xef. 여기서는 저널을 사용하고 있습니다.

$ journalctl -xef
Jul 24 20:23:04 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=man logger
Jul 24 20:23:24 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=logger hi
Jul 24 20:23:24 centos7 vagrant[1811]: hi

logger다음과 같이 스크립트에서 명령을 사용하여 출력을 캡처 할 수 있어야 합니다 .

$ cat /etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
echo "hickory stick" | logger

이제 재부팅하면:

$ journalctl -xef
...
Jul 24 20:31:41 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=journalctl -xe
Jul 24 22:24:00 centos7 logger[1286]: hickory stick
Jul 24 22:24:00 centos7 sshd[1270]: Server listening on 0.0.0.0 port 22.
Jul 24 22:24:00 centos7 sshd[1270]: Server listening on :: port 22.
Jul 24 22:24:00 centos7 systemd[1]: Starting Permit User Sessions...

logger에 추가된 메시지를 통해 우리의 메시지를 볼 수 있습니다 /etc/rc.local.

추가 정보

logger매우 유용합니다. 스위치를 거치는 대신 파일에 기록할 수 있으며 -f, 스위치를 사용하여 로그에 표시된 태그를 제어할 수도 있습니다 -t.

$ logger -t "smurfs" hi
$ journalctl -xe | grep smurfs
Jul 24 20:38:24 centos7 smurfs[1764]: hi

인용하다

답변2

.bash_profile에 넣어 보셨나요? 로그인 시 실행되는 파일입니다. 따라서 모든 사람이 로그인하거나 기술적으로 부팅할 때 열리지 않습니다. 그러나 한 명의 사용자를 사용하는 경우 이는 귀하의 요구에 맞는 간단한 솔루션이 될 수 있습니다.

루트인 경우 실제로는 /home/root가 아닌 /root인 홈 디렉터리로 이동합니다. (적어도 내가 익숙한 배포판에서는 "echo $HOME"을 사용하여 홈 디렉터리를 확인할 수 있습니다.)

거기에서 다음을 수행하십시오.

ls -la

.bash_profile이라는 숨겨진 파일이 표시되면 열어서 살펴보세요. 대부분에는 몇 가지 지침이 주석으로 추가되어 있습니다. 여기서 스크립트를 직접 실행하거나 다음을 사용하여 호출할 수 있습니다.

sh '/home/root/test.sh'

관련 정보