programing

시작 시 셸 스크립트 실행 방법

padding 2023. 5. 13. 09:14
반응형

시작 시 셸 스크립트 실행 방법

Amazon S3 Linux 인스턴스에는 다음과 같은 두 가지 스크립트가 있습니다.start_my_app그리고.stop_my_app영구적으로 시작하고 중지합니다(Node.js 응용 프로그램 실행).이러한 스크립트를 사용하여 Node.js 응용 프로그램을 수동으로 시작하고 중지합니다.지금까지는 좋습니다.

내 문제:나는 또한 그것을 설정하기를 하고 싶습니다.start_my_app시스템이 부팅될 때마다 실행됩니다.내부에 파일을 추가해야 한다는 것을 알고 있습니다.init.d그리고 나는 그것을 어떻게 내의 적절한 디렉토리에 연결하는지 알고 있습니다.rc.d하지만 내가 저장한 파일 안에 실제로 무엇이 들어가야 하는지 알 수 없습니다.init.d내 생각엔 한 줄로 해야 할 것 같아, 마치,start_my_app하지만 그것은 저에게 효과가 없었습니다.

먼저 시작 스크립트 @ /home/user/startup.sh 를 생성하고 실행 가능하게 합니다.

chmod +x /home/user/startup.sh

그런 다음 crontab을 설정합니다.

$ crontab -e
@reboot  /home/user/startup.sh

이제 시작입니다.sh 스크립트는 시작할 때마다 실행됩니다.

이 입한파에 ./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/

최신 버전의 Debian에서는 스크립트가 LSB를 준수해야 하므로 이 작업이 작동하지 않습니다(최소한 시작, 중지, 재시작, 강제 다시 로드 및 상태 작업을 제공하십시오).https://wiki.debian.org/LSBInitScripts

참고로 스크립트의 파일에 대한 절대 경로를 상대 경로 대신 항상 사용해야 합니다. 이 경로를 사용하면 예기치 않은 문제가 해결될 수 있습니다.

/var/myscripts/start_my_app

마지막으로 파일 위에 셰방을 포함했는지 확인합니다.

#!/bin/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 애플리케이션을 사용자 오라클로 시작하는 데 사용됩니다.

은 대의이름다같습다니음과은본▁the다같니▁is습./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

크론탭에 한 줄만 추가하면 됩니다.

파일이 실행 가능한지 확인합니다.

chmod +x /path_to_you_file/your_file

crontab 파일을 편집하는 방법

crontab -e

추가해야 하는 라인:

@reboot  /path_to_you_file/your_file

간단하네요!

다른 옵션은 crontab에 @reboot 명령을 설정하는 것입니다.

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

.local을 사용하여nano또는gedit편집하고 스크립트를 추가합니다.파일 경로는 다음과 같습니다./etc/rc.local또는/etc/rc.d/rc.local.

sudo nano /etc/rc.local

다음은 편집 내용입니다.

#!/bin/sh
/path-to-your-script/your-scipt-name.sh

되면 인가끝나면쇄를 .ctrl+o업데이트하려면 다음을 누르십시오.Enter그리고나서ctrl+x.

파일을 실행 파일로 만듭니다.

sudo chmod 755 /etc/rc.local

그런 다음 rc-local 서비스를 시작하여 부팅 중 스크립트를 실행합니다.

sudo systemctl start rc-local

할 수 있습니다.

chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

그런 다음 이 명령을 사용합니다.

update-rc.d start_my_app defaults 100

Cyberciti에서 이 페이지를 참조하십시오.

부팅 시 무언가를 시작하는 것에 대한 대답은 많지만 스크립트가 네트워킹 등에 의존하기 때문에 조금 늦게 시작하려는 경우가 많습니다.사용하다at이러한 지연을 추가하려면 다음과 같이 하십시오.

at now + 1 min -f /path/yourscript

추가할 수 /etc/rc.local에서도 할 수 .cron 예:

# crontab -e
@reboot at now + 1 min -f /path/yourscript

cron을 하는 것은 재미있지 않나요? 페이지에 . man 페이지에 있습니다.man at.

@reboot가 널리 지원되지 않을 수도 있다는 의견에 대해서는 그냥 시도해 보십시오.저는 /etc/rc.local이 unbuntu와 raspbian과 같은 systemd를 지원하는 디스트리뷰터에서 쓸모없게 되었다는 것을 알게 되었습니다.

실행하고 싶은 모든 것이 간단한 스크립트(또는 무엇이든)라면 가장 쉬운 방법은 시스템 > 환경설정을 사용하는 GUI가 있는 경우 앱을 시작하는 것입니다.

원하는 스크립트를 탐색하기만 하면 됩니다. (스크립트 실행 파일로 만들기)

간단한 솔루션은 CentOS를 실행하는 Amazon Linux 인스턴스에서 작동했습니다.편집하기/etc/rc.d/rc.local파일을 작성하고 명령을 거기에 놓습니다.이 파일에는 다른 모든 init 스크립트 이후에 실행될 것이라고 나와 있습니다.그러니까 그 점에 있어서는 조심해야 합니다.이것이 현재 여기에 이미지 설명 입력파일이 저를 찾는 방식입니다.마지막 줄은 제 대본의 이름입니다.

직접 /init 실행 파일 만들기

이것은 여러분이 원하는 것이 아니지만, 재미있습니다!

임의의 실행 파일, 심지어 셸 스크립트를 선택하고 명령줄 매개 변수를 사용하여 커널을 부팅합니다.

init=/path/to/myinit

부팅이 끝날 무렵 리눅스 커널은 지정된 경로에서 첫 번째 사용자 공간 실행 파일을 실행합니다.

가 인기 있는 러여프트인기제공서에로를 합니다.initsystemd와 같은 주요 디스트리뷰터들에 의해 사용되는 실행 파일들 그리고 대부분의 디스트리뷰터들에서 그것은 정상적인 시스템 운영에 사용되는 많은 프로세스들을 포크할 것입니다.

하지만 우리는 납치할 수 있습니다./init시스템을 더 잘 이해하기 위해 최소 스크립트를 실행하는 것입니다.

다음은 재현 가능한 최소 설정입니다. https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init

나는 이 블로그를 참조했고, 항상 좋은 선택으로 들립니다.

https://blog.xyzio.com/2016/06/14/setting-up-a-golang-website-to-autorun-on-ubuntu-using-systemd/

vim /lib/systemd/system/gosite.서비스

Description=A simple go website
ConditionPathExists=/home/user/bin/gosite

[Service]
Restart=always
RestartSec=3
ExecStart=/home/user/bin/gosite

[Install]
WantedBy=multi-user.target

systemctl enable gosite.service

여러 가지 방법으로 완료:

  1. 크론탭
  2. rc.local
  3. init.d
  4. 계통이 있는

데비안 9는 https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up 을 참조하십시오.도움이 되었습니다.데비안 9의 짧은 버전: /etc/rc.local에 명령(루트로) 추가

/path_to_file/filename.sh ||  exit 1   # Added by me
exit 0

/path_to_file/filename일 수 있습니다.sh는 실행 가능해야 합니다(그렇다고 생각합니다).

루분투에서 저는 반대의 상황에 대처해야 했습니다.후하고 ㅠㅠ Skype에서 .~/.config/autostart/ 서철류.skypeforlinux.desktop.

[Desktop Entry]
Name=Skype for Linux
Comment=Skype Internet Telephony
Exec=/usr/bin/skypeforlinux
Icon=skypeforlinux
Terminal=false
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true

이 파일을 삭제한 것이 도움이 되었습니다.

여기 더 간단한 방법이 있습니다!

첫 번째: 셸 스크립트를 작성하고 .sh로 저장합니다. 예는 다음과 같습니다.

#!/bin/bash
Icoff='/home/akbar/keyboardONOFF/icon/Dt6hQ.png'
id=13
fconfig=".keyboard"
echo "disabled" > $fconfig
xinput float $id
notify-send -i $Icoff "Internal Keyboard disabled";

이 스크립트는 시작 시 내부 키보드를 비활성화합니다.

두 번째: "시작 응용프로그램 기본 설정" 응용프로그램을 엽니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

세 번째: 추가를 클릭합니다. 네 번째: NAME 섹션에서 이름을 지정합니다.다섯 번째: 명령 섹션에서 .sh. 6번째: 명령 섹션을 다음과 같이 편집합니다.

bash <space> path/to/file/<filename>.sh <space> --start

일곱 번째: 추가를 클릭합니다.바로 그거야!끝!

이제 PC를 재부팅하여 확인합니다.

건배!

  • 스크립트를 /etc/init.d/ 디렉토리에 추가합니다.
  • 수준 : rc 파일:$ update-rc.d myScript.sh defaults NNNN . 100년 을 의미합니다.예를 들어 99는 98 이후와 100 이전에 실행된다는 것을 의미합니다.

가장 일반적인 방법은 단순하게 실행하는 것입니다.~.bash_profile또는~.profile (bash_profile 파일이 없는 경우).

파일 하단에 실행 명령을 추가하기만 하면 시스템이 시작될 때 실행됩니다.

입니다; 아에예있습니다가시래다있니▁i습.~\Desktop\sound_fixer.sh

Python 3 마이크로서비스 또는 셸로 작업; Ubuntu Server 18.04(바이오닉 비버), Ubuntu 19.10(Eoan Ermine) 또는 Ubuntu 18.10(Cosmic Cuttlefish)을 사용하면 항상 다음 단계를 수행하고 항상 작동합니다.

  1. 이 경우 p example "brain_microservice1.service"라는 마이크로서비스를 생성합니다.

    $ nano /lib/systemd/system/brain_microservice1.service
    
  2. 현재 사용 중인 이 새로운 서비스 내부:

    [Unit]
    Description=brain_microservice_1
    After=multi-user.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices    /microservice_1.py -k start -DFOREGROUND
    ExecStop=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful-stop
    ExecReload=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful
    PrivateTmp=true
    LimitNOFILE=infinity
    KillMode=mixed
    Restart=on-failure
    RestartSec=5s
    
    [Install]
    WantedBy=multi-user.target
    
  3. 권한을 부여합니다.

    $ chmod -X /lib/systemd/system/brain_microservice*
    $ chmod -R 775 /lib/systemd/system/brain_microservice*
    
  4. 실행 권한을 부여합니다.

    $ systemctl daemon-reload
    
  5. 활성화하면 시작 시 항상 시작됩니다.

    $ systemctl enable brain_microservice1.service
    
  6. 그런 다음 테스트할 수 있습니다.

    sudo reboot now

  7. 마무리 = SUCCESS!!

동일한 본문 스크립트를 사용하여 셸 실행, 대응... 데이터베이스 시작 스크립트...모든 종류의 OS 코드...이것이 당신에게 도움이 되길 바랍니다...

...

일부 사용자에게는 다음과 같은 이점이 있습니다.

시스템 → 기본 설정 → 시작 응용 프로그램에 다음 명령을 추가하기만 하면 됩니다.

bash /full/path/to/your/script.sh

언급URL : https://stackoverflow.com/questions/12973777/how-to-run-a-shell-script-at-startup

반응형