command를 실행된 상태로 그대로 두고 terminal을 계속 사용하고 싶으면 background로 실행하면 된다.
command 다음 &
을 붙이면 background로 실행된다.
거기에 더해, 서버가 재부팅이 되더라도 자동 실행되게 하고 싶다면 service로 만들어 systemd가 관리하게 만들 수 있다.
아래 예시에서는 storescp command를 service로 등록하는 방법이다.
만들고자하는 service의 스크립트 내용
/opt/jihoon/bin/storescp
파일을 만들고 아래 스크립트 내용을 service로 등록할 것이다.
#!/bin/bash
mkdir -p /home/jihoon/store/
storescp +xa -od /home/jihoon/store/ 14025
mkidr로 폴더를 만들때 -p 옵션쓰면 이미 폴더가 있을때 에러 안 띄우고 폴더를 새로 생성하지 않는다.
만든 스크립트를 서비스로 등록하기
아래와 같은 경로에 파일을 만든다. 파일 이름은 service 이름이 된다.
/lib/systemd/system/storescp.service
예시에서의 서비스 이름은 storescp
가 된다.
생성한 파일에 아래 내용을 채운다.
[Unit]
Description = storescp for TEST
After = network.target
[Service]
User = jihoon
Group = jihoon
Type = simple
PIDFile = /tmp/storescp.pid
Restart = on-failure
WorkingDirectory = /opt/jihoon/bin
ExecStart = /opt/jihoon/bin/storescp
ExecStop = /bin/kill -s TERM $MAINPID
[Install]
WantedBy = multi-user.target
각 옵션에 관한 자세한 설명은 아래 링크 참고. https://www.freedesktop.org/software/systemd/man/systemd.service.html
User
, Group
은 서버의 user, group을 뜻하고 생성한 서비스를 어느 user, group이 실행할지 결정한다.
Type
은 서비스가 시작되었다는 판단 기준을 어디에 둘지에 따라 정할 수 있다.
simple, fork, oneshot, dbus, notify, idle 이 있다.
PIDFile
은 예시에는 지정했으나 Type이 simple 인 경우 작성하지 않아도 된다.
Restart
옵션은 어떤 조건으로 서비스를 자동재시작할지 결정한다.
no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, always 가 있다.
WorkingDirectory
는 서비스가 실행될때의 작업 디렉토리다. 예시 서비스에서 쓸 command는 작업 디렉토리가 딱히 중요하지 않다. 지정하지 않으면 User
를 지정한 경우 User의 홈디렉토리가 된다.
ExecStart
만들 서비스의 스크립트 경로이다. 이 파일에 저장된 script 내용이 서비스가 된다.
ExecStop
입력한 명령이 stop일 때 실행되는 명령
WantedBy
생성한 서비스를 누가 불러올지 설정한다. 설정하지 않으면 자동으로 시작되지 않는다.
장점
이렇게 서비스로 등록하면 systemctl
명령어로 서비스를 관리할 수 있다.
journalctl -u storescp -f
명령어로 로그를 볼 수도 있고
systemctl enable storescp
를 실행하면 서버가 재부팅되어도 자동으로 서비스가 실행된다.
0 댓글