Ubuntu Server 17.10에서 시작할 때 스크립트를 실행하려면 어떻게해야합니까?


13

Ubuntu Server 17.10 시스템에서 시작시 스크립트를 실행하려면 어떻게해야합니까? 나는 방법이 17.10에서 변경되었다고 생각합니다.

답변:


14

스크립트를 적절한 사용자 cron테이블 (예 : crontab )에 스케쥴로 넣으십시오 @reboot.

사용자는로 cron표를 편집 할 수 있습니다 crontab -e.

/path/to/script.sh시작시 실행되는 예 :

@reboot /path/to/script.sh

루트로 실행해야하는 경우에는 사용하지 마십시오 @reboot sudo /path/to/script.sh. 루트의 crontab을 편집
하는 sudo crontab -eu root데 사용 합니다.

crontab (1), cron (8), crontab (8) 도 참조하십시오.


2

Ubuntu 15.04 이상에서는 기본적으로 systemd시작 서비스 및 절차를 자동화하는 프로그램 인 일종의 프로그램을 사용합니다. 약간의 노력만으로 직접 만들 수 있고 시작 서비스 목록에 추가 할 수 있습니다.

기본 시스템 서비스

이것은 .service파이썬 GUI 서버를 시작하는 데 사용할 수 있는 베어 파일입니다 (쉘 스크립트 일 수는 있지만 중요하지 않습니다).

[Unit]
Description=Python GUI Server

[Service]
ExecStart=/home/pi/software/GUI_POE.py &

[Install]
WantedBy=multi-user.target

Description옵션은 서비스 또는 무엇을 설명 임의의 문자열입니다.

ExecStart옵션은 실행할 명령을 지정합니다. 여기서는 실행 가능한 파이썬 스크립트의 경로를 제공하고 &토큰을 사용 하여 백그라운드에서 실행합니다.

WantedBy옵션은 대상이이 서비스를 사용하려는 대상에 따라 우선 순위를 지정합니다. 매우 특정한 시간에 서비스를 실행할 필요가없는 경우로 설정하십시오 multi-user.target.

기본 절차

  1. 시작할 때 nano또는 원하는 편집기를 사용하여 실행할 스크립트를 작성하십시오 . #!/bin/bashbash 스크립트 의 경우 파일 맨 위에 적절한 shebang을 포함시키고로 실행 권한을 부여하십시오 chmod.

  2. my_service.service라는 파일로 서비스를 작성하고를 사용하여 적절한 directoy에 복사하십시오 cp my_service.service /lib/systemd/system/.

  3. 서비스를 시작하십시오 : sudo systemctl start my_service.service. 서비스 실행을 지시 한 모든 스크립트가 시작됩니다. start 대신 "stop"을 사용하는 동일한 명령이 꺼집니다.

  4. 시작 프로세스에 서비스를 추가하십시오 sudo systemctl enable my_service.service.. 제거하려면 동일한 명령에서 "enable"을 "disable"로 바꾸십시오.

그리고 그게 다야! 시스템 서비스에서는 기본적으로 스크립트가 루트 권한으로 자동 실행됩니다.

나의 간단한 예 (전체)

참고로 다음은 Dash를 사용하여 간단한 Python GUI 서버를 시작하는 간단한 시스템 서비스입니다.

[Unit]
Description=Python GUI Server
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi

[Install]
WantedBy=multi-user.target

이 예제 서비스는 Python3 스크립트를 사용하지만 수식은 쉘 스크립트와 동일합니다.

추가 읽기에서 찾을 수 있습니다 이 우수한 튜토리얼 디지털 오션에 의해, 그리고 이 AskUbuntu 스레드 나 systemd 배울 도움이 훌륭한 대답과 함께. 도움이 되었기를 바랍니다!


2
이 질문에 체계적인 관점을 가져 주셔서 감사합니다! ExecStart 라인에서 백그라운드를 강제로 강제 할 필요가 없다는 것을 지적합니다.
Jeff Schaller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.