Ubuntu Server 17.10에서 시작 시 스크립트를 실행하는 방법은 무엇입니까?

Ubuntu Server 17.10에서 시작 시 스크립트를 실행하는 방법은 무엇입니까?

Ubuntu Server 17.10 컴퓨터에서 시작 시 스크립트를 실행하는 방법은 무엇입니까? 17.10에서 방법이 변경된 것 같습니다.

답변1

스크립트를 적절한 사용자 cron테이블(예:예약 된 일들)의 일정은 입니다 @reboot.

사용자는 를 사용하여 cron테이블을 편집할 수 있습니다 crontab -e.

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

@reboot /path/to/script.sh

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

또한보십시오:예약된 작업(1), 예약된 작업(8), 예약된 작업(8)

답변2

Ubuntu 15.04 이상에서는 기본적으로 systemd서비스와 프로세스를 자동으로 시작하는 프로그램(일종)인 이라는 프로그램이 사용됩니다. 약간의 노력만으로 자신만의 서비스를 만들고 시작 서비스 목록에 추가할 수 있습니다.

기본 시스템 서비스

다음은 Python GUI 서버를 시작하는 데 사용하는 베어본 .service파일입니다(셸 스크립트일 수도 있지만 중요하지 않음).

[Unit]
Description=Python GUI Server

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

[Install]
WantedBy=multi-user.target

옵션 Description은 서비스가 무엇인지 또는 무엇을 하는지 설명하는 문자열입니다.

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

WantedBy옵션은 이 서비스를 사용하려는 대상을 기반으로 우선순위를 지정합니다. 특정 시간에 서비스를 실행할 필요가 없으면 으로 설정하면 됩니다 multi-user.target.

기본 절차

  1. 또는 원하는 편집기를 사용하여 시작 시 실행할 스크립트를 작성하세요 nano. #!/bin/bash파일 맨 위에 올바른 shebang(bash 스크립트용)을 포함하고 chmod.

  2. my_service.service라는 파일에 서비스를 작성하고 올바른 디렉토리에 복사하기만 하면 됩니다 cp my_service.service /lib/systemd/system/.

  3. 서비스 시작: sudo systemctl start my_service.service서비스에 실행하도록 지시한 모든 스크립트가 시작됩니다. 시작 대신 동일한 명령 "중지"를 사용하여 종료하십시오.

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

그게 다야! 이것이 systemd 서비스의 기본 설정이므로 스크립트가 루트 권한으로 자동 실행된다는 점을 기억하십시오.

나의 간단한 예(완료)

참고로 다음은 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 스크립트를 사용하지만 공식은 셸 스크립트와 정확히 동일합니다.

자세한 내용은 다음에서 확인할 수 있습니다.이 훌륭한 튜토리얼DigitalOcean에서 제공하며,이 AskUbuntu 스레드systemd를 배우는 데 도움이 된 훌륭한 답변입니다. 도움이 되었기를 바랍니다!

관련 정보