[linux] 시작할 때 쉘 스크립트를 실행하는 방법

아마존 S3 리눅스 인스턴스, 나는 두 개의 스크립트 호출이 start_my_appstop_my_app시작 및 정지하는 영원히 (다시 내 Node.js를 응용 프로그램을 실행하는). 이 스크립트를 사용하여 Node.js 애플리케이션을 수동으로 시작하고 중지합니다. 여태까지는 그런대로 잘됐다.

내 문제 : start_my_app시스템을 부팅 할 때마다 실행되도록 설정하고 싶습니다 . 나는 안에 파일을 추가해야하고 init.d그것을 올바른 디렉토리에 심볼릭 링크하는 방법을 알고 rc.d있지만 실제로 내가 넣은 파일 안에 무엇이 들어가야하는지 알 수 없다 init.d. 나는 그것이 한 줄이어야한다고 생각 start_my_app하지만, 그것은 나를 위해 일하지 않았다.



답변

넣은 파일에서 /etc/init.d/다음을 사용하여 실행 파일을 설정해야합니다.

chmod +x /etc/init.d/start_my_app

@meetamit 덕분에 이것이 실행되지 않으면 /etc/rc.d/

ln -s /etc/init.d/start_my_app /etc/rc.d/

최신 데비안에서는 스크립트가 LSB를 준수해야하기 때문에 작동하지 않습니다 (최소한 시작, 중지, 다시 시작, 강제 재로드 및 상태).
https : //wiki.debian .org / LSBInitScripts

참고로, 상대 경로 대신 스크립트의 절대 경로를 넣어야합니다. 예기치 않은 문제가 해결 될 수 있습니다.

/var/myscripts/start_my_app

그리고 그 파일 위에 추가하는 것을 잊지 마십시오 :

#!/bin/sh


답변

이것을 위해 crontab을 설정하십시오.

#crontab -e
@reboot  /home/user/test.sh

모든 시작 후 테스트 스크립트를 실행합니다.


답변

간단한 접근 방식은 다음에 줄을 추가하는 것입니다 /etc/rc.local.

/PATH/TO/MY_APP &

또는 특수 사용자로 명령을 실행하려는 경우 :

su - USER_FOOBAR -c /PATH/TO/MY_APP &

(후행 앰퍼샌드는 프로세스를 배경으로하며 rc.local이 계속 실행되도록합니다)

전체 init 스크립트를 원한다면, 데비안 배포판에는 템플릿 파일이 있습니다.

cp /etc/init.d/skeleton /etc/init.d/your_app

그것을 조금 적응 시키십시오.


답변

이것이 제가 Red Hat Linux 시스템 에서하는 방식 입니다.

/etc/init.d루트 및 실행 파일이 소유 한에 스크립트를 넣습니다 . 스크립트 상단에에 대한 지시문을 제공 할 수 있습니다 chkconfig. 예를 들어, 다음 스크립트는 Java 애플리케이션을 사용자 oracle로 시작하는 데 사용됩니다.

스크립트의 이름은 /etc/init.d/apex

#!/bin/bash
# chkconfig: 345 99 10
# Description: auto start apex listener
#
case "$1" in
 'start')
   su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";;
 'stop')
   echo "put something to shutdown or kill the process here";;
esac

이는 스크립트가 레벨 3, 4 및 5에서 실행되어야하며 시작 / 중지 우선 순위는 99 및 10입니다.

그런 다음 사용자 는 시작시 스크립트를 활성화 또는 비활성화하는 데 사용할 root수 있습니다 chkconfig.

chkconfig --list apex
chkconfig --add apex

그리고 당신은 사용할 수 있습니다 service start/stop apex.


답변

다음을 cron사용하여 입력하십시오 sudo.

sudo crontab -e

시작할 때 실행할 명령 (이 경우 스크립트)을 추가하십시오.

@reboot sh /home/user/test.sh

저장:

ESC를 누른 다음 : x를 눌러 저장하고 종료하거나 ESC를 누른 다음 ZZ를 누르십시오 (shift + zz).

테스트 테스트 테스트 :

  1. cron없이 테스트 스크립트를 실행하여 실제로 작동하는지 확인하십시오.

  2. cron에 명령을 저장했는지 확인하십시오. sudo crontab -e

  3. 서버를 재부팅하여 모두 작동하는지 확인하십시오 sudo @reboot


답변

crontab에 줄을 추가하십시오.

파일이 실행 가능한지 확인하십시오.

chmod +x /path_to_you_file/your_file

crontab 파일을 편집하려면

crontab -e

추가해야 할 줄 :

@reboot  /path_to_you_file/your_file

간단합니다!


답변

또 다른 옵션은 crontab에 @reboot 명령을 사용하는 것입니다.

모든 버전의 cron이이를 지원하는 것은 아니지만 인스턴스가 Amazon Linux AMI를 기반으로하는 경우 작동합니다.