태그:             

리눅스를 crontab을 이용해서 필요한 시기에 자동으로 명령을 실행할 수 있다.

crontab을 사용하려면 편집을 통해 명령을 등록해야 되는데, 편집을 하려면 아래와 같이 한다.

$ crontab -e

crontab은 사용자별로 각각 등록할 수 있으므로 시스템 관련 명령을 사용하려면 root 사용자로 편집을 해야된다. 이를 위해 아래와 같이 한다.

$ sudo crontab -e

crontab의 명령은 아래와 같은 방법으로 입력한다.

 .---------------- minute (0 - 59)
 |  .------------- hour (0 - 23)
 |  |  .---------- day of month (1 - 31)
 |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
 |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
 |  |  |  |  |
 *  *  *  *  * command to be executed

위의 예시에서 별이 5개 있는데, 첫 번째 별부터 의미를 살펴보면…

  • 분 – 0부터 59의 값을 가진다.
  • 시 – 0부터 23의 값을 가진다.
  • 일 – 1부터 31의 값을 가진다.
  • 월 – 1부터 12의 값을 가진다.
  • 요일 – 0부터 6의 값을 가지며, 일요일이 0, 토요일이 6이다.
  • 명령 – 실행할 명령을 적는다.

예를 들어 매주 월요일 3시 30분에 재부팅을 하게 하려면 편집기에서 아래와 같이 입력한다.

30 3 * * 1 /sbin/shutdown -r now

편집을 다 했으면 <ctrl>-<x>를 누른 후 <y>를 누르면 편집한 내용이 저장되고 편집기를 마친다.

crontab에 등록된 명령 목록을 확인하려면 아래와 같이 한다. 필요하면 앞에 sudo를 붙인다.

$ crontab -l

마지막으로 아래와 같이 해서 cron 서비스를 다시 시작한다.

$ service cron restart

cron 서비스가 동작하는지 확인하려면 다음과 같이 한다.

$ service cron status

동작중이면 아래와 같이 표시된다.

● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2024-03-12 21:47:51 KST; 3s ago
Docs: man:cron(8)
Main PID: 1090 (cron)
Tasks: 1 (limit: 1116)
Memory: 444.0K
CGroup: /system.slice/cron.service
└─1090 /usr/sbin/cron -f

Mar 12 21:47:51 ShrimpServer systemd[1]: Started Regular background program processing daemon.
Mar 12 21:47:51 ShrimpServer cron[1090]: (CRON) INFO (pidfile fd = 3)
Mar 12 21:47:51 ShrimpServer cron[1090]: (CRON) INFO (Skipping @reboot jobs -- not system startup)

cron이 동작하지 않는다면…

● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2024-03-12 21:47:39 KST; 2s ago
Docs: man:cron(8)
Process: 625 ExecStart=/usr/sbin/cron -f $EXTRA_OPTS (code=killed, signal=TERM)
Main PID: 625 (code=killed, signal=TERM)

Mar 12 21:44:11 ShrimpServer systemd[1]: Started Regular background program processing daemon.
Mar 12 21:44:11 ShrimpServer cron[625]: (CRON) INFO (pidfile fd = 3)
Mar 12 21:44:12 ShrimpServer cron[625]: (CRON) INFO (Running @reboot jobs)
Mar 12 21:47:39 ShrimpServer systemd[1]: Stopping Regular background program processing daemon...
Mar 12 21:47:39 ShrimpServer systemd[1]: cron.service: Succeeded.
Mar 12 21:47:39 ShrimpServer systemd[1]: Stopped Regular background program processing daemon.

관련글

리눅스에서 crontab을 이용한 자동화

리눅스에서 crontab을 이용한 자동화”에 대한 1개의 생각

  • 2024년 4월 3일 10:59 오후
    고유주소

    30 3 * * 1 reboot

    위와 같이 했더니 재부팅 명령이 동작하지 않았다.
    메시지가 Skipping @reboot jobs — not system startup라고 나오는 걸 보면,
    재부팅 시 명령을 실행하라는 것으로 이해하는 것 같다. 즉 @reboot로 이해하는 듯.

    30 3 * * 1 /sbin/shutdown -r now

    이렇게 바꿨더니 잘 동작하는 걸 보면

    30 3 * * 1 /sbin/reboot

    로 하면 잘 될 것으로 보인다.

    응답

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다