이 문서에서는 Linux CentOS/RHEL 7/8에서 자동으로 시작되도록 서비스 및 스크립트를 구성하는 방법에 대한 기본 사항을 배웁니다. 특히 systemd 데몬에서 서비스를 추가하거나 시작에서 제거하는 방법을 배우고 Linux에서 부팅할 때 스크립트나 데몬을 시작하는 다른 방법을 고려하십시오.
이 기사는 Linux에서 자동으로 시작된 서비스 또는 스크립트 목록을 빠르게 찾고, 시작할 서비스나 스크립트를 추가하거나, 일부 앱의 자동 시작을 비활성화하는 방법을 가르치는 데 목적이 있습니다.
Systemctl을 사용하여 Linux에서 시스템 서비스 관리
가장 인기 있는 Linux 배포판(CentOS, RHEL, Debian, Fedora 및 Ubuntu)은 systemd를 사용합니다. init.d 대신 시작 데몬 . 시스템 다른 데몬을 시작하고 관리하는 데 사용되는 Linux 서비스 관리자입니다. /etc/systemd/system
의 단위 파일을 사용합니다. (init.d /etc/init.d/
에서 사용된 스크립트 ). Systemd를 사용하면 OS 부팅 시 서비스 시작을 병렬화할 수 있습니다.
systemd를 관리하려면 systemctl 명령이 사용됩니다.
우선 시스템을 부팅한 후 systemd에서 사용 가능한 장치 목록을 확인합니다. :
systemctl list-units
다음 명령을 사용하여 단위 파일 목록을 가져올 수 있습니다.
systemctl list-unit-files
이 명령은 사용 가능한 모든 단위 파일을 표시합니다.
활성 서비스 및 해당 상태 목록을 표시하려면 다음 명령을 실행하십시오.
# systemctl list-units -t service
일부 장치는 시작 후 비활성화될 수 있으므로 —all을 사용하여 전체 목록을 얻을 수 있습니다. 옵션.
# systemctl list-units --all
UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ● exim.service not-found inactive dead exim.service firewalld.service loaded active running firewalld - dynamic firewall daemon [email protected] loaded active running Getty on tty1 ● iptables.service not-found inactive dead iptables.service Bring up/down networking ● NetworkManager-wait-online.service not-found inactive dead
목록에서 볼 수 있듯이 디스크에 없는 서비스도 표시됩니다.
또한 다음과 같은 다른 플래그를 사용할 수 있습니다.
- —상태 — 데몬 상태를 감지하는 데 사용됨:Load, Active, Sub
- —유형 — 유형별로 단위를 필터링할 수 있습니다.
예:
systemctl list-units --all --state=active
—활성 시스템 단위 목록만 표시
systemctl list-units —type=service
— 서비스인 단위 목록을 표시합니다.
Systemd에서 서비스를 만드는 방법은 무엇입니까?
서비스를 관리하기 위해 systemd는 특별한 구문을 사용합니다. .service를 추가해야 합니다. 서비스 이름 뒤에 예:
# systemctl enable nginx.service
– 이 명령은 nginx 웹 서버를 시작에 추가합니다.
이 명령은 systemd의 서비스 명령에 지정된 파일에 대한 심볼릭 링크를 생성합니다. 시작 디렉토리.
# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service명령의 출력은 서비스 파일에 대한 심볼릭 링크가 생성된 디렉토리를 보여줍니다.
서비스가 시작에 추가되었는지 확인하기 위해 상태를 확인할 수 있습니다.
systemctl status nginx.service
출력에서 다음 줄을 확인하세요.
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
활성화됨 값은 이 서비스가 Linux 시작에 추가됨을 의미합니다. 서비스가 자동으로 시작되지 않으면 사용 안 함으로 표시됩니다. 여기.
Systemd에서 서비스를 비활성화하는 방법
서비스 자체는 제거되지 않는 동안 Linux 부팅 시 시작되지 않도록 시작 시 서비스를 제거할 수 있습니다. 서비스 시작을 비활성화하려면 다음 명령을 실행하십시오.
# systemctl disable your_service
예를 들어, nginx 자동 시작을 비활성화하려면:
# systemctl disable nginx.service
Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service
그렇게 하면 서비스 파일에 대한 심볼릭 링크가 systemd 디렉토리에서 제거됩니다. 서비스가 자동으로 시작되는지 확인할 수 있습니다.
# systemctl is-enabled nginx
Systemd로 장치를 어떻게 마스킹합니까?
비활성화한 후에도 시동에 남아 있고 Linux 재부팅 후에 시작된 일부 사악한 서비스를 발견했습니다. 이 문제를 해결하기 위해 서비스를 마스킹할 수 있습니다.
# systemctl mask nginx.service
그러면 수동으로 또는 OS를 다시 시작한 후에 시작되지 않습니다.
# systemctl mask nginx.service
Created symlink from /etc/systemd/system/nginx.service to /dev/null.
# service nginx restart
Redirecting to /bin/systemctl restart nginx.service Failed to restart nginx.service: Unit is masked.
다음 명령을 사용하여 서비스 마스크를 해제할 수 있습니다.
# systemctl unmask nginx.service
Removed symlink /etc/systemd/system/nginx.service.
서비스를 마스킹한 후 단위 파일을 확인하면 서비스가 masked로 표시된 것을 볼 수 있습니다. :
Rc.local로 스크립트 또는 서비스 실행
Linux 부팅 시 다른 스크립트를 실행하려면 rc.local 자주 사용됩니다.
스크립트 외에 rc.local 사용 systemd를 사용하여 시작된 서비스도 실행할 수 있습니다. . systemd가 있는 경우 rc.local을 사용해야 하는 이유를 모르겠습니다. 하지만 여기에 몇 가지 예가 있습니다.
먼저 /etc/rc.local 실행 가능해야 합니다.
chmod +x /etc/rc.local
Rc.local을 systemd autostart에 추가해야 합니다.
systemctl enable rc-local
그리고 nginx를 시작하는 명령을 추가할 수 있습니다. 웹 서버를 rc.local로 :
service nginx start
하지만 rc.local은 거의 사용하지 않습니다. 서비스를 시작합니다. 더 자주 rc.local은 스크립트를 시작하거나 명령을 한 번 실행하는 데 사용됩니다.
예를 들어 /root/test.sh 스크립트를 만들었습니다. 그것은 뭔가를하고 부팅 직후에 실행하고 싶습니다. rc.local 파일에 다음 줄을 추가합니다.
sh /root/test.sh
CentOS 7부터 개발자는 rc.local 사용되지 않는 데몬이며 스크립트나 서비스를 시작하는 데 사용하지 않는 것이 좋습니다. 하지만 매우 간단하기 때문에 아직 작동 중일 때 사용합니다.
Systemd로 Linux 서비스를 만드는 방법은 무엇입니까?
자신만의 데몬을 만들고 systemd.를 통해 관리할 수 있습니다.
예를 들어 동일한 스크립트(/root/test.sh ) 시스템이 재부팅될 때마다 새 서비스의 파일을 만드는 것부터 시작하겠습니다.
touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service
파일 내용은 다음과 같습니다.
[Unit] Description=Template Settings Service After=network.target [Service] Type=oneshot User=root ExecStart=/root/test.sh [Install] WantedBy=multi-user.target
주요 매개변수는 다음과 같습니다.
User
– 데몬이 시작된 사용자 계정
Type=oneshot
— systemd는 다른 장치를 계속 진행하기 전에 프로세스가 끝날 때까지 기다려야 합니다.
확인하고 다시 시작하십시오.# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service
● test-script.service - Test Loaded: loaded (/etc/systemd/system/test-script.service; disabled; vendor preset: disabled) Active: active (running)
서비스가 제대로 작동하면 시스템 시작에 추가하십시오.
# systemctl enable test-script.service
Created symlink from /etc/systemd/system/multi-user.target.wants/test-script.service to /etc/systemd/system/test-script.service.
따라서 자동 시작하는 스크립트를 추가하고 systemd를 통해 관리할 수 있습니다.
Cron을 사용하여 스크립트를 실행하는 방법
특정 빈도로 스크립트나 명령을 실행하려면 cron을 사용할 수 있습니다. :
crontab -e
— cron 작업 테이블을 변경하기 위해 편집기를 엽니다.
여기에 원하는 작업을 추가합니다. 예를 들면 다음과 같습니다.
* * * * * /root/test.sh
— 1분에 한 번씩 스크립트를 실행합니다.
감시자를 작성할 수 있습니다. 서비스 상태를 확인하는 스크립트이며 서비스가 실행되고 있지 않으면 스크립트가 서비스를 시작합니다. 일부 프로젝트에서 비슷한 방식을 사용하고 있습니다.
cron의 모든 작업 목록을 표시하려면 다음 명령을 실행하십시오.
# crontab -l
* * * * * /root/test.sh
cron 작업을 순서대로 실행하는 데 사용할 수 있는 시간 값:
- 분:0-59
- 시간:0-59
- 날짜:1-31
- 월:1-12
- 요일:0-7(0 또는 7은 일요일)
우리 작업에서 스크립트는 1분에 한 번 실행되므로 *별표*가 있습니다.
cron 중 하나에 스크립트를 배치할 수도 있습니다. 디렉토리:
- /cron.daily – 스크립트가 하루에 한 번 실행되는 경우
- /cron.hourly – 스크립트가 한 시간에 한 번 실행되는 경우
- /cron.monthly — 한 달에 한 번 실행되는 스크립트의 경우
- /cron.weekly — 스크립트가 일주일에 한 번 실행되는 경우
지정된 디렉토리의 스크립트는 자동 일정에 따라 실행됩니다.
Bash 시작 스크립트:.bashrc
SSH를 시작할 때 몇 가지 작업을 수행하려는 경우 콘솔에서 .bash_profile에 명령이나 스크립트를 추가할 수 있습니다. 또는 .bashrc 파일. 이론적으로 이러한 파일에 작업을 추가할 수 있으며 어떤 경우에도 실행됩니다. 일반적으로 필요한 것은 .bashrc에 추가되고 .bashrc는 .bash_profile에서 시작됩니다.
.bashrc 파일에 nginx 웹 서비스를 다시 시작하는 명령을 추가했습니다.
service nginx restart
그런 다음 파일을 저장하고 SSH 세션을 다시 시작했습니다.
보시다시피 터미널을 시작할 때 웹 서버도 다시 시작되었습니다. 터미널을 시작할 때 수행할 수 있는 작업은 무엇입니까? 가동 시간과 같은 몇 가지 추가 도구일 수 있습니다. 서버 확인:
또는 특정 디렉토리로 이동하여 mc를 시작하려면 ssh 콘솔을 실행할 때 .bashrc에 다음을 추가합니다. :
cd /var/
mc
Linux에서 Linux 서비스 또는 스크립트 시작을 관리하는 방법에 대한 이 문서가 도움이 되었기를 바랍니다(이 문서는 CentOS 및 RHEL용으로 작성되었지만 다른 배포판에는 적합함). 이 정보가 Linux 시스템 관리의 기초를 공부하는 사람들에게 유용할 것이라고 확신합니다.