시스템이 시작될 때마다 실행되도록 Linux 시작에 애플리케이션/스크립트를 추가할 수 있는 방법이 있습니까?
자동화된 방법을 찾고 있습니다. 즉, 사용자가 크론 작업이나 이와 유사한 방법을 통해 추가하면 안 됩니다.
답변1
답변2
Xorg가 자동으로 시작됩니다.
시스템 수준 시작 스크립트 외에도 데스크탑 환경에는 프로그램을 자동으로 실행하는 고유한 방법이 있을 수 있습니다. 이 폴더는 .config/autostart
자동 실행 항목을 정의하는 데스크탑에 구애받지 않는 방법이어야 합니다. /etc/xdg/autostart
시스템 전체 구성의 경우. 사양에 대한 자세한 내용은 다음을 방문하십시오.http://developer.gnome.org/autostart-spec/.
LXDE 자동 시작 항목은 에서도 사용할 수 있습니다 ~/.config/lxsession/LXDE/autostart
.
스크립트를 실행해야 하는 경우 상황이 약간 다릅니다.뒤쪽에네트워크가 작동 중입니다. 이 경우 네트워크 관리자가 정의할 수 있는 특별한 연결 후 스크립트가 있는지 확인해야 합니다. 둘 다네트워크 관리자그리고세계문화센터연결 후 자동으로 실행될 항목을 지정하는 자체 방법이 있습니다. 네트워크를 구성하는 경우 이 폴더 ifupdown
에 사후 스크립트를 배치할 수 있습니다 . /etc/network/if-up.d/
그러나 연결 후 스크립트를 실행하는 더 좋은 방법은 아마도 시스템화되는 것입니다(이를 지원하는 시스템의 경우, 가장 현대적인 배포판임).
시스템 서비스로 자동 시작
데스크탑이 필요하지 않은 그래픽 응용프로그램을 자동 시작하려면 xorg나 현재 데스크탑 환경에서 제공하는 자동 시작 도구를 사용하지 않는 것이 가장 좋습니다.
systemd
이는 많은 최신 배포판에서 널리 사용되며 서비스 시작 및 실행 방법에 대한 많은 제어 및 유연성을 제공합니다.
몇 가지 장점을 요약하겠습니다(systemd는 더 많은 일을 할 수 있습니다):
- 루트 또는 특정 사용자로 실행: 예:
User=myuser
- 구성 가능한 시간 제한을 사용하여 실패 시 서비스를 다시 시작합니다.
Restart=on-failure|on-watchdog|on-abnormal|always
- 서비스 유형 설정:
Type=simple|forking|oneshot|notify|dbus
- 시작 전제 조건과 종속성을 설정합니다. 즉, 네트워크 시작 후 서비스가 시작되도록 설정할 수 있습니다(
Wants=network-online.target
리소스[Unit]
섹션에서).
telegram-cli 데몬의 샘플 서비스를 시작합니다. 에 넣으세요 /etc/systemd/system/tg.service
.
[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli
User=jicu
[Install]
WantedBy=multi-user.target
이제 서비스가 자동으로 시작되도록 활성화할 수 있습니다.
sudo systemctl enable tg
서비스를 시작합니다:
sudo systemctl start tg
서비스 중단:
sudo systemctl stop tg
상태 확인:
systemctl status tg
서비스를 비활성화합니다.
sudo systemctl disable tg
추가 입력 시간을 절약하려면 이 ~/.bashrc
줄을 추가 alias sc='sudo systemctl $*'
한 다음 위 명령을 sc start tg
다음과 같이 단축할 수 있습니다.
참고: 이를 사용해 본 적이 있다면
cron
crontab 항목이 제한된 환경에서 작동한다는 것을 알 수 있습니다. 동일하게 적용됩니다systemd
. 절대 경로가 항상 사용되며 정의된 변수에 대해 어떠한 가정도 이루어지지 않습니다. 스크립트가 의존하는 모든 변수를 명시적으로 설정합니다.systemd
~하지 않을 것이다사용자의.bashrc
및 을 사용하십시오$PATH
.
추가 정보:
답변3
rc.local
예, 또는 /etc
디렉토리 /etc/rc.d
에 있는 실행 파일의 경로를 정의하여 Linux에서 부팅 시 프로그램을 실행할 수 있습니다 . 예:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/path/to/executable
참고: 파일 문서에 설명된 대로 실행 권한을 할당하는 것을 잊지 마십시오.Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.
답변4
각 배포판은 자체 부팅 기술을 사용하므로 배포판 설명서를 확인하세요. /etc/rc.local은 일부 자동화 스크립트를 넣을 수 있는 곳이지만 실제로는 오래되었습니다. 오늘날 대부분의 Linux 기반 시스템은 실행 수준 또는 시스템 부팅을 사용하므로 자동으로 시작되는 대부분의 작업을 세분화할 수 있습니다.