시작 시 셸 스크립트 실행 방법
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)를 누릅니다.
테스트 테스트 테스트:
cron 없이 테스트 스크립트를 실행하여 실제로 작동하는지 확인합니다.
하고 "cron"을 합니다.
sudo crontab -e
작동하는지 합니다.
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
부팅이 끝날 무렵 리눅스 커널은 지정된 경로에서 첫 번째 사용자 공간 실행 파일을 실행합니다.
가 인기 있는 러여프트인기제공서에로를 합니다.init
systemd와 같은 주요 디스트리뷰터들에 의해 사용되는 실행 파일들 그리고 대부분의 디스트리뷰터들에서 그것은 정상적인 시스템 운영에 사용되는 많은 프로세스들을 포크할 것입니다.
하지만 우리는 납치할 수 있습니다./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
- 크론탭
- rc.local
- init.d
- 계통이 있는
데비안 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 NN
NN . 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)을 사용하면 항상 다음 단계를 수행하고 항상 작동합니다.
이 경우 p example "brain_microservice1.service"라는 마이크로서비스를 생성합니다.
$ nano /lib/systemd/system/brain_microservice1.service
현재 사용 중인 이 새로운 서비스 내부:
[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
권한을 부여합니다.
$ chmod -X /lib/systemd/system/brain_microservice* $ chmod -R 775 /lib/systemd/system/brain_microservice*
실행 권한을 부여합니다.
$ systemctl daemon-reload
활성화하면 시작 시 항상 시작됩니다.
$ systemctl enable brain_microservice1.service
그런 다음 테스트할 수 있습니다.
sudo reboot now
마무리 = SUCCESS!!
동일한 본문 스크립트를 사용하여 셸 실행, 대응... 데이터베이스 시작 스크립트...모든 종류의 OS 코드...이것이 당신에게 도움이 되길 바랍니다...
...
일부 사용자에게는 다음과 같은 이점이 있습니다.
시스템 → 기본 설정 → 시작 응용 프로그램에 다음 명령을 추가하기만 하면 됩니다.
bash /full/path/to/your/script.sh
언급URL : https://stackoverflow.com/questions/12973777/how-to-run-a-shell-script-at-startup
'programing' 카테고리의 다른 글
GitLab 토큰을 사용하여 인증 없이 복제 (0) | 2023.05.13 |
---|---|
Angular 2 이상 / Typescript에서 글로벌 변수를 선언하려면 어떻게 해야 합니까? (0) | 2023.05.13 |
목록을 올바르게 사용하는 방법 (0) | 2023.05.13 |
Base64 이미지를 HTML로 표시하는 방법 (0) | 2023.05.13 |
MongoD 블로그 수정 및 재생 (0) | 2023.05.13 |