Solve Fedora 17 boot problem repair filesystem fsck

It’s weird when my Fedora suddenly crash and it’s give this error message when boot-up and asking for “repair filesystem”:

1
2
3
4
5
6
7
8
9
10
11
12
Loading initial ramdisk...
_Fedora-16-Beta-: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. (i.e., without -a or -p options)
dracut Warning: e2fsck returned with 4
dracut Warning:_Fedora-17-contains a file system with errors, check forced.
dracut Warning:_Fedora-17: Inodes that were part of a corrupted orphan linked list found.
dracut Warning: * An error occured during the file system check.
dracut Warning: * Dropping you to a shell; the system will try
dracut Warning: * to mount the filesystem(s), when you leave the shell.
dracut Warning:
Dropping to debug shell.
sh: can't access tty; job control turned off
(Repair filesystem):/#

The solution for this cases is easy:

1. Get your root partition :

1
blkid

For instance, I have fedora installed in “/dev/sda6″

1
2
3
4
5
6
/dev/sda1: SEC_TYPE="msdos" LABEL="DELLUTILITY" UUID="3030-3030" TYPE="vfat" 
/dev/sda2: LABEL="Recovery" UUID="CC70378A703779F2" TYPE="ntfs" 
/dev/sda3: LABEL="OS" UUID="AC7C4EC27C4E86D4" TYPE="ntfs" 
/dev/sda5: LABEL="DATA" UUID="2E24594324590EE9" TYPE="ntfs" 
/dev/sda6: LABEL="_Fedora-17-x86_6" UUID="861accd0-45a3-4129-a477-f931e5dc9816" TYPE="ext4" 
/dev/sda7: UUID="87c4e897-c3b7-467e-b275-2838e50cc1a5" TYPE="swap"

2. Repair

1
fsck /dev/sda6 -vY

Do hard reboot and you will get your Fedora back! Remember to have backup of your HDD:)



출처 - http://www.yodi.sg/solve-fedora-17-boot-problem-repair-filesystem-fsck/







'System > Linux' 카테고리의 다른 글

linux - 이미지(사진) 편집 툴 모음  (0) 2013.10.26
linux - D-Bus  (0) 2013.08.30
linux - cron, crontab  (0) 2013.08.23
linux - watch and grep  (0) 2013.07.12
linux - Running Additional Programs at Boot Time  (0) 2013.07.02
Posted by linuxism
,


그럼, 실제로 EFL이 어떠한 라이브러리들로 구성되어 있는지 살펴보고 각 라이브러리에서 제공하는 기능과 특징들을 하나씩 살펴보도록 하자. 우선 EFL블록 다이어그램을 보도록 하자.

 

 

EFL 블록 다이어그램

 

그림에서 보여주듯이, EFL은 적지 않은 라이브러리들로 구성되어 있다. 그만큼 EFL은 다양한 기능들을 제공하며 확장성을 고려하여 모듈화가 잘 되어 있음을 암시한다. 구축된 블록들의 위치가 다소 복잡해 보일 수도 있지만, 위 그림은 각 EFL 모듈 간의 빌딩 순서를 명확히 보여주고 있다. 예로, Elementary는 이하 모든 라이브러리들에 의존하고 있으며 Ecore 같은 경우는 Evas, Eet, Eina에 의존하게 된다EFL OS를 기반으로 작동하며 EFL어플리케이션은 EFL의 각 라이브러리가 제공하는 기능들을 이용하여 구현될 수 있다그럼 각 모듈의 역할을 순서대로 살펴보도록 하자.

 

 

Eina 

EFL의 가장 기본이 되는Eina(에이나)는 자료구조 라이브러리이다. C++의 STL과 같이 배열, 리스트, 해시, 트리 그리고 공유 문자열(shared string)과 같은 다소 복잡한 로직을 사용자가 쉽고 빠르고 안전하게 구현할 수 있도록 유용한 기능들을 제공한다. Eina 상단의 모든 EFL 라이브러리뿐만 아니라, 어플리케이션에서도 이러한 데이터 구조 기능들을 이용하여 필요한 로직을 효과적으로 구현할 수 있을 것이다.

 

 

Eet

Eet(이이티)는 데이터 인코딩 및 디코딩의 역할을 제공한다. 임의의 자료구조나 이미지 데이터 등을 압축하여 파일로 저장하거나 네트워크를 통해 다른 머신으로 전송할 수 있으며 후에 다시 Eet를 이용하여 압축된 파일을 읽고 디코딩할 수가 있다. Eet에서 사용되는 이러한 압축기법은 zip과 매우 유사하며파일로부터 임의의 위치의 데이터에 매우 빠르게 접근할 수 있다는 장점도 제공한다. 뿐만 아니라, 데이터 압축시 암호화하는 기능을 부가적으로 제공하므로 보다 안정적인 데이터 보관이 가능하다.

 

 

Evas 

EFL의 가장 핵심으로 볼 수 있는 Evas(에바스)는 하나의 캔버스 또는 렌더링 엔진으로 불린다. 사용자는 Evas를 통해 윈도우 내에 이미지, 사각형, 선, 폴리곤 그리고 텍스트 등을 표현할 수 있는데 그러한 출력물 개별은 모두 객체화가 되어있다. Evas에서는 이러한 객체들을 Evas_Object 타입으로 제공하며 사용자는 EFL 프로그래밍에서 모든 그래픽 객체들을 Evas_Object 라는 인터페이스로 접근하고 이를 통해 화면 상에 특정 그래픽 객체들을 표현할 수가 있다. 또한, Evas는 사용자 입력 이벤트 전달 메커니즘도 담당하고 있으므로 각 오브젝트가 사용자 입력 이벤트에 적절히 반응하도록 그 인터페이스도 제공한다. 

  

하지만, Evas는 렌더링 방식에 있어서 리테인 모드(retain mode)를 채택하였으며, 내부적으로 장면그래프(scene-graph)를 통해 오브젝트들을 관리하면서 화면상에 보여야 할 객체들을 적절히 최적화하여 알아서 렌더링 해준다는 특징을 지니고 있다. 이는 사용자들로 하여금 복잡한 렌더링 매커니즘으로부터 좀더 자유로워질 수 있다는 것을 의미하며 사용자들이 어플리케이션의 주 로직의 구현에 집중할 수 있게 도와준다.

 

Evas에서의 기본 Workflow

 

기본적으로 Evas는 소프트웨어 렌더링 방식을 지원하지만, 플랫폼 환경에 따라 오픈지엘, 오픈지엘 ES 등과 같은 그래픽 H/W 가속 기능을 벡엔드(backend)로 지원하며, MMX나 네온과 같은 SIMD 벡터화도 이용하므로 최적의 렌더링 성능을 보장하고 있다.

 

 

Ecore

Ecore(이코어)는 사용자들의 편의를 위해 제공되는 시스템 기반 라이브러리이며 메인루프, 타이밍, 이벤트, 커넥션, IPC, 스레드, 윈도우 시스템 등과 관련된 기능들을 제공하고 있다. 이러한 기능들은 각 시스템 API들의 복잡한 설정 및 사용 단계들을 내부적으로 처리해주고 보다 쉽고 단순화하여 사용자들에게 제공되므로, 사용자들이 직접 시스템 기능들을 구현할 때 필요한 시간과 노력이 단축될 수 있으며 보다 안정적으로 EFL 일관된 방식의 프로그래밍을 할 수 있게 도와준다.

 

특히나 EFL 어플리케이션은 Ecore에서 제공하는 메인루프를 기반으로 작동되는데, Ecore에서 제공되는 기능들이 Ecore 메인루프의 주 로직에 적합하게 접합되어 처리되므로 필요 시에는 시스템 API를 이용하지 말고 반드시 Ecore에서 제공되는 기능들을 이용해야 한다.

 

 

Edje

Edje(엣지)는 복잡한 GUI 구성을 위한 기능들을 제공한다. Edje는 EDC라는 스크립트 언어를 제공하며 사용자는 EDC 스크립트를 통해 프로그램 코드로부터 GUI 부분을 분리하여 프로그램을 작성할 수가 있다. EDC는 edje_cc 컴파일러를 통해 EDJ 바이너리 형태로 변환되는데, 프로그램은 이러한 EDJ파일을 런타임시에 읽어서 Evas_Object로 바인딩하여 GUI를 구축할 수가 있다. Edje의 이러한 특성 때문에 어플리케이션은 재컴파일없이 GUI 디자인을 바꿀 수도 있게 된다.

 

 

Edje를 이용하면 코드에서 GUI 부분을 분리할 수가 있다

 

 

Embryo

일종의 바이트코드 가상 머신인 Embryo(엠브리오)는 EDC 파일 내에서 구현될 수 있는 작은 프로그램을 위해 이용된다. 일반적으로 사용자들은 EDC 내에서 단순한 계산을 구현하거나 각 오브젝트 상태를 바꾸는 등의 간단한 기능을 구현하기 위해 C 언어 스타일의 Embryo 스크립트 언어를 추가로 이용할 수 있으며, 이러한 Embryo 스크립트는 폰(PAWN) 컴파일러를 통해 폰 바이너리로 변환된다. 결국, 폰 프로그램은 머신의 환경에 의존하지 않고Embryo의 AMX(Abstract Machine eXecutive) 가상머신에 의해 해독되어 작동될 수 있으며 하나의 출력물을 가지고도 다른 시스템 환경에서도 동일한 동작을 보장할 수 있게 한다.

 

 

Emotion

Emotion(이모션)은 비디오/오디오 플레이백(Playback) 라이브러리이다. Emotion은 Gstreamer, Xine 혹은 VLC와 같은 다른 비디오 재생 플러그인 등을 이용하여 영상을 재생하고 이러한 영상 출력 결과물을 Evas Object에 연동하여 사용자에게 제공한다. 이를 통해 사용자는 동영상 재생과 함께 GUI를 결합한 화면 구성을 쉽고 간단히 구현할 수가 있다.

 

 

Emotion을 이용한 동영상 재생 

 

Elementary

사실 앞서 EFL 라이브러리들을 살펴보았지만, Elementary(엘레멘트리)야 말로 GUI 어플리케이션 개발에 있어서 가장 유용한 기능들을 제공할 것이다. Elementary는 위젯 툴킷(Widget 툴킷) 라이브러리이며, 버튼, 리스트, 레이블, 슬라이더와 같은 범용의 위젯들을 제공할 뿐만 아니라 다양한 룩 앤 필(Look & Feel)을 지원하기 위한 동적 테마 변경, 다양한 스크린 해상도를 지원하기 위한 GUI 확장성(Scalability) 등의 특징들을 갖는다.

 

 

 

Elementary 위젯들

 

 

 

Elementary 확장성: 스크린 사이즈 / 해상도에 따라 GUI 구성이 자동 조정된다.

 

 

 

Elementary Theme: 동일한 애플리케이션일지라도 테마 속성에 따라 룩앤필(Look & Feel)이 달라진다.

 

Efreet, Eio, Eeze, Ethumb, E_dbus

Efreet, Eio, Eeze, Ethumb, E_Dbus는 부가적으로 추가된 라이브러리이다. Efreet는 아이콘, 데스크톱 파일, 메뉴 등과 관련하여 Freedesktop.org의 표준에 맞춰 애플리케이션이 작동할 수 있도록 설계된 라이브러리이며, Eio는 비동기 입출력(I/O)을 위한 라이브러리, Ethumb은 frame 이미지를 더한 썸네일 이미지를 생성해주는 기능을 제공하며, Eeze는 udev를 통하여 하드웨어 장비를 조작하기 위해 쓰이는데, 예로 cd-rom의 디스크 삽입 여부, CPU 온도, 전원의 밧데리와 같은 장비의 상태 및 정보를 얻고 조작하는데 사용된다. 마지막으로 E_dbus는 메세지 버스 시스템인 dbus의 랩퍼(wrapper)로 볼 수 있으며,IPC를 수행하는데 있어서 dbus의 명세서(specification)를 구현하고 있다. 

 

 

Languauge Bindings

그 외 EFL 커뮤니티에서는 Elev8(Java script), 파이선, Perl, C++, Vala와 같은 랭귀지 바인딩 프로젝트를 진행하고 있으며, 기본 C언어를 비롯한 다양한 랭귀지를 지원하여 보다 다양한 프로젝트 환경에서 EFL을 이용할 수 있도록 노력하고 있다. 많은 오픈소스 개발자들이 바인딩 프로젝트에 참여한다면 보다 사용성이 높은 EFL이 될 수 있을 것이다.

 

 

 

참고 - www.enlightenment.org



출처 - http://cafe.naver.com/eflkor/16




Posted by linuxism
,

linux - cron, crontab

System/Linux 2013. 8. 23. 11:29


  • 예약 실행 기능 사용하기
    • 정해진 시각에 설정해 둔 내용이 실행될 수 있는 환경을 구축한다.
      • 이를 위해서는 데몬 형태로 항상 시간을 체크하고 해당 시간에 지정된 명령어를 실행하는 프로그램을 설치해야 한다.
      • 이 역할을 하는 프로그램은 cron, anacron 그리고 at가 있다.
        • cron(chronometer; 정확한 시계?) : 주기적으로 반복되는 작업을 수행하기 위한 데몬.  지정된 시간에 시스템의 전원이 꺼져 있으면 예약된 내용은 실행 안됨.  
        • anacron(ana-chronometer; 뒤에 실행되는 정확한 시계?) : 전원이 꺼져 있을 때 실행되지 못한 예약작업을 전원이 켜지면 실행해주는 기능을 가진 데몬.
        • at(at a specified time; 지정된 시간에) : 일시적으로 한번만 수행되는 작업을 예약하기 위한 데몬.
      • 여기에서는 필요에 의해 사용할 수 있도록 두가지 프로그램을 모두 설치한다.
    • 패키지 설치
      • cron 설치
        • vixie-cron-3.0.1-74.i386.rpm (용량 : 51,851 ) : 반복 예약실행 기능을 담당하는 데몬.  Vixie가 만든 cron에는 보안 강화와 더불어 좀 더 강력한 옵션 설정 기능이 추가되어 있다.
      • anacron 설치
        • anacron-2.3-29.i386.rpm (용량 : 34,776 ) : 전원이 꺼져 있는 경우에도 반복 예약 실행 기능을 사용할 수 있는 데몬.
          • crontabs-1.10-5.noarch.rpm (용량 : 4,741 ) : 예약 실행 기능을 설정하는 프로그램.
      • at 설치
        • at-3.1.8-46.i386.rpm (용량 : 44,942 ) : 지정된 시간에 일회성 예약 실행 기능을 수행하는 데몬.
    • 기본 설정
      • cron 설정
        • 프로그램을 설치하면 /etc/rc.d/init.d/crond가 설치되고, 런레벨 2, 3, 4, 5에서 실행되도록 설정된다.
          • 결국 부팅하면 예약 실행 기능은 자동으로 작동되게 되고, 사용자는 예약 작업을 추가하기만 하면 되는 것이다.
          • 하지만 우선은 설치 후 부팅 과정을 거치지 않았기 때문에 crond를 수동으로 작동시켜야 한다.
            • /etc/rc.d/init.d/crond start ↙
        • 이렇게 실행된 crond는 매분 마다 /etc/crontab, /etc/cron.d, /var/spool/cron/USERNAME의 설정파일 변경사항을 점검해서 예약 실행에 반영한다.  여기에서 언급된 각 설정 파일은 아래에서 자세히 설명한다.
          • 실행 결과에 대한 로그는 /var/log/cron에 저장된다.
        • 예약 작업을 추가/제거하려면 /usr/bin/crontab이라는 명령어를 사용하면 된다.
          • 예약 작업은 관리자와 일반 사용자 모두 추가할 수 있는데, 보안상의 문제로 인해 여기서는 일반 사용자는 이 기능을 사용하지 못하게 한다.  즉, 관리자만 예약 실행 기능을 사용하도록 한다.
            • chmod  700  /usr/bin/crontab ↙     디스크를 꽉차게 만들 수 있는 보안상의 헛점을 예방하기 위해 실행 권한을 제한한다.
          • 또한 각 실행 스크립트의 접근 권한을 관리자에게만 허락한다.
            • chmod 700 /etc/cron.hourly/* ↙
            • chmod 700 /etc/cron.daily/* ↙
            • chmod 700 /etc/cron.weekly/* ↙
            • chmod 700 /etc/cron.monthly/* ↙
          • crontab 명령어의 사용법은 다음과 같다.
            • crontab -u  USERNAME  FILENAME ↙    파일내용을 지정된 사용자의 예약 작업으로 등록시킨다.
            • crontab -u  USERNAME  OPTION ↙    지정된 사용자의 예약 작업을 다룬다.  옵션은 -l, -r, -e가 올 수 있다.
            • crontab FILENAME ↙    파일 내용을 관리자(root) 권한의 예약 작업으로 등록한다.  단, 파일은 crontab형식에 맞게 작성되어 있어야 한다.
            • crontab -l ↙    관리자(root)에 의해 등록된 예약 작업을 확인한다.  /var/spool/cron/root로 저장된다.
            • crontab -r ↙    관리자(root)에 의해 등록된 예약 작업을 제거한다.
            • crontab -e ↙    관리자(root)에 의해 등록된 예약 작업을 편집한다.
          • crontab 설정파일 형식
            • 1개의 예약 작업은 1개 라인으로써 5개의 날짜필드와 2개의 명령필드로 구성되어 있다.
            • <MM> <HH> <DD> <mm> <d> [permission] <command>
              • MM : 분 (0분~59분)
              • HH : 시 (0시~23시)
              • DD : 날짜 (1일~31일)
              • mm : 달 (1월~12월)
              • d : 요일 (0~7, 0과 7은 일요일을 나타냄)
              • permission : 명령어를 실행할 사용자명을 기록해 준다.  /etc/cron.d에 넣는 경우에는 이 부분이 반드시 있어야 한다.
              • command : 실행할 명령어.
            • 시간을 나타내는 각 필드에서 와일드 카드(*)는 모든 시간을 의미하며, 불규칙한 여러시간에 걸쳐 실행될 경우에는 콤마(,)로 나타낼 수 있다.  또한 연속적인 여러시간은 하이픈(-)을 사용하고 띄엄띄엄 '격'으로 사용할 경우 슬래쉬(/)를 사용한다.
              • 즉, 요일을 예로 들어 보면, 일주일 내내 실행할 경우에는 *를 사용하면 되고, 월요일과 금요일만 실행할 경우 1,5라고 입력하면 된다.  그리고 월요일부터 수요일까지 실행해야 하는 경우라면 1-3라고 입력하면 되고, 월요일부터 금요일까지 2일에 한번씩 실행해야 하는 경우라면 1-5/2 라고 입력하면 된다.
            • crontab 설정파일의 위치는 다음과 같다.
              • 관리자용 예약 작업 내역 : /etc/crontab 파일과 /etc/cron.d 디렉토리.
              • 일반 사용자용 예약 작업 내역 : /var/spool/cron/ 디렉토리. (이 아래에서 '사용자명'으로 파일을 만들어 사용한다.)
          • /usr/bin/crontab 파일의 사용 권한 설정
            • 이미 앞에서 permission을 변경해 주었기 때문에 큰 의미는 없지만 알고는 있어야 하므로 내용을 파악함.
            • 사용 권한은 허가 파일과 거부 파일을 사용해서 제어한다.
              • /etc/cron.allow : 허가목록.  이 파일에 등록된 사용자만 crontab 사용이 가능하다.
              • /etc/cron.deny : 거부목록.  이 파일에 등록된 사용자는 crontab 사용이 불가능하다.
              • 각 파일의 한 라인은 한 명씩의 사용자 이름을 기록하면 된다.
            • 만약 두 개의 파일 모두 없다면 모든 사용자가 사용 가능하다.
            • 두 파일 모두 존재한다면 crontab은 cron.deny의 내용을 무시하고 cron.allow에 등록된 내용을 우선 적용한다.
            • cron.deny만 존재하면 여기에 등록된 사용자만 제외하고 나머지 모든 사용자가 crontab을 사용할 수 있다.
            • cron.allow만 존재하는 경우는 이 파일에 등록된 사용자만 crontab을 사용할 수 있다.
            • root사용자는 위의 두 파일에 영향을 받지 않는다.
        • /etc/crontab 파일 분석
          • SHELL=/bin/bash ↙    시스템이 사용할 쉘의 종류.
          • PATH=/sbin:/bin:/usr/sbin:/usr/bin ↙    실행파일을 찾을 경로 설정.
          • MAILTO=root ↙     예약 작업의 실행 결과를 뒤에 명시된 메일 주소로 보내줌.  메일주소를 비워두면 보내지 않음.
          • HOME=/ ↙    명령을 실행할 때 사용할 홈디렉토리 경로.
          •  ↙
          • # run-parts ↙    주석.
          • 01 * * * * root run-parts /etc/cron.hourly ↙   매 시간 1분에 실행.
          • 02 4 * * * root run-parts /etc/cron.daily ↙     매일 4시 2분에 실행.
          • 22 4 * * 0 root run-parts /etc/cron.weekly ↙    매주 일요일 4시 22분에 실행.
          • 42 4 1 * * root run-parts /etc/cron.monthly ↙    매월 1일 4시 42분에 실행.
          • 이 파일은 root권한으로 /usr/bin/run-parts라는 스크립트를 실행하도록 설정되어 있다.
          • 이 스크립트는 뒤에 명시되는 디렉토리에 있는 실행파일들을 모두 실행시킨다. (물론 각종 백업 파일을 제외한...)
          • cron.hourly, cron.daily, cron.weekly, cron.monthly에 들어가는 스크립트는 일반적인 스크립트들이다.  cron.d에 crontab형식의 파일이 들어가는 것과는 차이가 있다.
            • 기본적으로 들어가 있는 스크립트는 다음과 같다.
            • makewhatis.cron : whatis DB 갱신. 매일, 매주 실행하도록 설정되어 있음.  makewhatis는 root만 실행할 수 있다.
              • whatis DB는 "/var/cache/man/whatis" 파일에 저장된다.
              • whatis는 지정된 명령어의 간략한 설명을 whatis DB에서 찾아 보여주는 것으로, 말 그대로 해당 명령어가 무엇인지를 알려주는 것이다.  세부적인 사용법은 man page를 참고해야 한다.
            • rpm : 현재 설치되어 있는 패키지의 목록을 /var/log/rpmpkgs 파일로 만들어 준다.  매일 실행되도록 설정되어 있다.
              • 이 파일은 실수 또는 이상작동으로 인해 rpmdb가 날아갔거나 시스템이 일부 손상되었을 때 rpm 패키지들 또는 DB를 손쉽게 복구할 수 있도록 해 준다.
              • RPM 패키지 전체 다시 설치 : rpm -Uvh --nodeps --force `cat /var/log/rpmpkgs` ↙
              • RPM 데이터베이스 복구 : rpm -Uvh --nodeps --force --justdb `cat /var/log/rpmpkgs` ↙
            • yum : 먼저 yum을 업데이트하고 나서 전체 시스템의 패키지를 업데이트 한다.  매일 실행되도록 설정되어 있다.
              • 단, 이러한 업데이트는 /var/lock/subsys/yum 파일이 있을 때만 실행되지만 현 상태에는 이 파일이 없어 업데이트가 되지 않는다.  만약 이 파일을 만들어 업데이트를 하고 싶으면 "/sbin/service yum start"를 실행해 주거나 부팅시에 실행될 수 있도록 원하는 런레벨에 "S??yum"으로 넣어 주면 된다.  (영 귀찮으면 직접 touch해도 된다.)
          • 그리고 만약 1분 단위로 실행하고 싶으면 매 시간 실행하는 스크립트 내부에 1분씩 sleep을 주고 1시간 이내로 loop를 사용해 명령을 넣으면 된다.  더 나아가 1초 단위로 프로그램을 실행하고 싶으면 sleep을 1초 단위로 주고 1시간 이내로 loop를 실행하면 된다.
        • /etc/cron.d 디렉토리
          • 만약 매 시간, 매일, 매주, 매월 단위로 실행되는 스케쥴이 아니라 특정시간에 수행하는 경우라면 /etc/cron.d에 crontab파일 형식으로 파일을 만들어 넣어두면 된다.
          • 예)
            • 30 3 * * mon cat /proc/meminfo >> /tmp/meminfo ↙
            • 10 4 1 * * /root/scripts/backup.sh ↙
      • anacron 설정
        • 프로그램을 설치하면 /etc/rc.d/init.d/anacron가 설치되고,  런레벨 2, 3, 4, 5에서 실행되도록 설정된다.
          • 우선은 설치 후 부팅 과정을 거치지 않았기 때문에 anacron을 수동으로 작동시켜야 한다.
            • /etc/rc.d/init.d/anacron start ↙
          • 이 프로그램은 "/var/spool/anacron/TIMESTAMP"에 실행 내역이 기재되어 있지 않거나 명령실행 주기를 넘어선 예약 작업이 있다면 해당 명령을 실행시켜준다.  이는 전원이 꺼져 있어서 실행되지 못한 예약작업이 있을 경우 부팅하면 일정 시간 후 자동으로 실행하도록 할 수 있기 때문에 24시간 켜져 있지 않는 컴퓨터에 유용하게 사용될 수 있다.
          • Anacron 데몬은 부팅시 한번만 실행된 후 종료되며, 설정파일과 timestamp 파일 내용을 확인하여 예약 작업 실행여부를 판단한다.
          • 역시 로그는 cron과 같은 /var/log/cron에 남겨진다.
        • 예약 작업 추가/제거 방법
          • '/etc/anacrontab'에 설정 내용이 담겨져 있다.  예약 작업을 추가/제거하기 위해서는 이 파일을 직접 편집해야 한다.
          • 1개의 예약작업은 1개의 라인으로써 4개의 필드로 구성되어 있다.
          • <period> <delay> <job-identifier> <command>
            • period : 명령 실행 주기 (하루 단위).
            • delay : 지연 실행 시간 (분 단위).
            • job-identifier : Anacron 메시지에서 작업의 타임스탬프 파일로서 사용되는 작업 식별자. 공백, 슬래시 사용금지.
            • command : 실행할 명령어.
          • Anacron은 현재 날짜로부터 최근의 명령 실행 주기(period) 이내에 명령어가 실행되었는지 확인하고, 만약 실행되지 않았으면 지연시간(delay)만큼 기다렸다가 command를 실행한다.
          • 예약 작업이 완료되면 "/var/spool/anacron/<job-identifier>" 파일(=timestamp file)에 시간을 제외한 날짜를 기록한다.
          • 레드햇/페도라에서는 기본적으로 cron의 매일/매주/매월 실행되는 내용이 제대로 실행되었는지 확인하도록 설정되어 있다.
            • 이 때문에 /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly 에는 각 타임스탬프 파일에 실행 내용 기록을 업데이트하는 0anacron 파일이 존재한다. (단, 예약 작업을 중복실행하지는 않는다)
      • at 설정
        • 프로그램을 설치하면 /etc/rc.d/init.d/atd가 설치되고,  런레벨 3, 4, 5에서 실행되도록 설정된다.
          • 우선은 설치 후 부팅 과정을 거치지 않았기 때문에 atd를 수동으로 작동시켜야 한다.
            • /etc/rc.d/init.d/atd start ↙
          • Atd는 지정된 작업을 queue에 넣는데, 이 queue는 /var/spool/at 디렉토리 아래에 파일로 만들어진다.  그리고 매분 큐를 확인해서 지정된 시간이 되었다면 실행을 하고, 실행결과는 사용자의 메일로 전송한다.  그리고 실행완료된 예약 작업은 큐에서 제거된다.
        • 예약 작업 추가/제거 방법
          • 예약 작업 추가하기
            • at  <시간> ↙    지정된 시간에 아래에서와 같이 표준입력으로 입력되는 내용들을 실행한다.
              • at> ...명령어 입력... ↙    "at>" 프롬프트가 뜨면 실행할 명령어들을 입력한다.
              • at> ctrl + d ↙    명령어들의 입력이 끝나면 ^D를 눌러 해당 내용을 저장한다.
            • at <시간> -f <파일명> -m -q t ↙    지정된 시간에 실행된 작업을 직접 입력하지 않고 지정된 파일에서 읽어오고(-f),
              • 실행결과를 실행한 사용자의 메일로 알려준다(-m).
              • 그리고 "t"라는 queue에 작업을 넣는다(-q t).  참고로 사용가능한 큐는 a-z, A-Z까지이고, 별도로 지정되지 않으면 a를 기본 큐로 사용한다.  그리고 특히 b는 batch명령(시간에 관계없이 CPU사용률에 따른 예약 실행을 하는 명령어)에서 사용되는 큐이며 나머지 큐들은 뒷쪽의 문자를 사용할수록 nice값을 높여서 실행한다.
          • 예약 작업 목록 보기
            • atq ↙    큐에 저장된 작업들을 보여준다. (보여지는 정보는 '작업번호', '작업예정시간', '작업이 저장되어 있는 큐'이다.)
            • at -l ↙    atq와 동일한 기능을 하는 명령어.
            • at -c ↙   단순한 예약 작업 목록 뿐만 아니라 at프롬프트에서 입력했던 명령어까지 같이 보여준다.
            • 작업목록을 보는 명령어는 root인 경우에는 모든 작업들의 목록을 보여준다.
          • 예약 작업 삭제하기
            • atrm <작업번호> ↙    지정된 예약 작업을 큐에서 삭제한다.
            • at -d <작업번호> ↙    atrm과 동일한 기능을 하는 명령어.
          • 시간 표기법
            • at명령어에 사용할 수 있는 <시간>의 형식은 기본적으로 "hh:mm YYYY-MM-DD"로 적는다.
            • "hh:mm"은 시간으로 24시간제를 기본으로 한다.  만약 am, pm을 뒤에 붙여주면 12시간제로 사용할 수 있다.  만일 시간이 이미 지났으면, 다음날 지정된 시간에 작업을 실행한다.
              • 그 외에 다음과 같은 단어를 사용해서 시간을 표현할 수도 있다.
                • now : 현재 시각.
                • midnight : 00:00 = 12:00AM.
                • noon : 12:00PM.
                • teatime : 16:00 = 4:00PM.
              • 시간에 증가 설정을 사용할 수도 있다.
                • 형식은 "시간+증가시간"인데 증가시간의 표기는 다음과 같다.
                • +10minute(10분 후) , +1hour(1시간 후), +3hours(3시간 후), +5days(5일 후).
            • "YYYY-MM-DD"은 년월일을 의미한다.
              • 다음과 같은 형식으로 사용되기도 한다.
              • "month-name day year" : 예를 들어 January 15 2002.  년도는 생략가능.
              • "MMDDYY", "MM/DD/YY" 또는 "MM.DD.YY" : 예를 들어 011502는 2002년 1월 15일.
              • today(오늘), tomorrow(내일).
        • 권한설정
          • at 명령어를 사용할 수 있는 사용자를 제한하기 위해 /etc/at.allow(허가목록)와 /etc/at.deny(거부목록)을 사용한다.
          • 파일 내용의 1줄이 사용자 1명을 의미하고 내용은 '사용자명'을 기록하면 된다.  빈줄은 넣을 수 없다.
          • 만약 이 파일들이 수정되더라도 atd를 다시 실행할 필요는 없다.  at명령어가 실행될 때 마다 이 파일들을 참고하기 때문이다.
          • at.allow와 at.deny는 보통 둘 중 하나만 사용되지만 2개 모두 있는 경우도 있다.
          • 각 경우의 사용자 허용 범위를 살펴 보면 다음과 같다.
            • /etc/at.deny 만 존재 : 기본적으로 모든사용자가 사용가능하고 at.deny 에 등록된 사용자만 사용불가.
            • /etc/at.allow 만 존재 : at.allow 파일에 등록된 사용자만 사용가능.
            • 두 파일 모두 없을 때 : 일반사용자는 불가능하고 root만 사용가능.
            • 두 파일 모두 있을 때 : at.deny 내용을 무시하고 at.allow 나타난 사용자만 사용가능.

 

    • 예약 실행기능 등록
      • 여기에서는 crond를 이용해 정기적으로 시간 동기화와 DDNS update를 하도록 설정한다.
      • 시간 동기화
        • 시간은 여러 가지 이유로 틀려질 수 있는데 사용자가 접속하지 않는 서버인 경우에는 크게 문제가 없지만 여러사용자가 접속하는 서버인 경우에는 문제가 된다.
        • 가장 대표적인 예가 데이터베이스인데, DB 트랜잭션 처리시에 시간이 엉켜 버리면 입력되는 데이터도 엉망이 되어 버리므로 반드시 시간 동기화 문제는 해결해야 한다.
        • 여기서는 하루 단위로 시간 동기화를 한다.
        • 우선 timezone을 위한 설정을 완료해 준다.
          • /etc/sysconfig/clock 파일을 작성한다. (파일 링크 : clock )
            • cat > /etc/sysconfig/clock ↙
            • ZONE="Asia/Seoul" ↙
            • ctrl + d ↙
          • /etc/profile에 TZ 변수도 설정해 준다. (파일 링크 : profile )
            • export TZ=/usr/share/zoneinfo/ROK ↙
        • 시간 동기화에 사용할 스크립트 제작해서 "/etc/cron.daily/" 에 넣는다. (파일 링크 : sync_time )
          • 이 스크립트는 타임서버에서 시간을 읽어와 ±30분의 오차를 넘어서면 시간을 변경하지 않는다.  
            • 예전에 타임서버가 1970년으로 잘못 초기화되어 여러 사이트들의 DB가 엉키는 사태가 벌어진 적이 있었기 때문에 이런 조치를 취한다.
          • 두 대의 타임서버를 지정하여, 첫 번째 타임서버에서 동기화를 실패할 경우 두 번째 타임서버로 동기화 할 수 있도록 하였다.
          • #!/bin/bash ↙
          •  ↙
          • TIMESERVER1="time.bora.net" ↙     첫 번째 타임서버 지정.
          • TIMESERVER2="time.nist.gov" ↙      두 번째 타임서버 지정.
          •  ↙
          • PAST_TIME=`date --date '30 minutes ago' +%Y%m%d%H%M%S` ↙     오류확인 시각으로 사용할 -30분 시각 지정.
          • FUTURE_TIME=`date --date '30 minutes' +%Y%m%d%H%M%S` ↙        오류확인 시각으로 사용할 +30분 시각 지정.
          • NEW_TIME=`rdate -p $TIMESERVER1` ↙    첫 번째 타임서버에서 시각을 읽어옴.
          • if [ $? == 0 ]; then ↙     만약 오류 없이 시각을 가져왔다면...
          •         TIMESERVER=$TIMESERVER1 ↙      첫 번째 타임서버를 시각설정 서버로 지정.
          • else ↙     만약 오류가 있다면....
          •         NEW_TIME=`rdate -p $TIMESERVER2` ↙     두 번째 타임서버에서 시각을 읽어옴.
          •         if [ $? != 0 ]; then ↙     두 번째 타임서버에서도 오류가 발생했다면...
          •                 echo "($NEW_TIME) Sync time : Error" >> /var/log/sync_time.log ↙    오류 메시지를 발생시킴.
          •                 exit 1 ↙   스크립트를 종료시킴.
          •         fi ↙
          •         TIMESERVER=$TIMESERVER2 ↙     만약 오류없이 두 번째 타임서버에서 시각을 읽어왔다면 시각설정 서버로 지정.
          • fi ↙
          • NUM_YEAR=`echo $NEW_TIME | awk '{ print $7 }'` ↙     서버에서 가져온 시각에서 년도 분리.
          • NUM_MONTH=`echo $NEW_TIME | awk '{ print $4 }'` ↙   서버에서 가져온 시각에서 월 분리.
          • case "$NUM_MONTH" in ↙     분리한 월을 숫자로 변환.
          •         Jan) NUM_MONTH="01" ;; ↙
          •         Feb) NUM_MONTH="02" ;; ↙
          •         Mar) NUM_MONTH="03" ;; ↙
          •         Apr) NUM_MONTH="04" ;; ↙
          •         May) NUM_MONTH="05" ;; ↙
          •         Jun) NUM_MONTH="06" ;; ↙
          •         Jul) NUM_MONTH="07" ;; ↙
          •         Aug) NUM_MONTH="08" ;; ↙
          •         Sep) NUM_MONTH="09" ;; ↙
          •         Oct) NUM_MONTH="10" ;; ↙
          •         Nov) NUM_MONTH="11" ;; ↙
          •         Dec) NUM_MONTH="12" ;; ↙
          • esac ↙
          • NUM_DAY=`echo $NEW_TIME | awk '{ print $5 }'` ↙     서버에서 가져온 시각에서 날짜 분리.
          • if [ $NUM_DAY -lt 10 ]; then ↙    만약 서버에서 가져온 날짜가 10보다 작은 한자리 수라면...
          •         NUM_DAY=`echo 0$NUM_DAY` ↙      앞에 0을 덧붙인다.   즉, 시간 오차확인에 사용할 수 있도록 형식을 통일해 준다.
          • fi ↙
          • NUM_TIME=`echo $NEW_TIME | awk '{ print $6 }' | awk -F : '{ print $1 $2 $3 }'` ↙     서버에서 가져온 시각에서 시간부분만 분리.
          • NEW_TIME=`echo $NUM_YEAR$NUM_MONTH$NUM_DAY$NUM_TIME` ↙     분리했던 내용들을 숫자 형태로 합침.
          • if [ $NEW_TIME -gt $PAST_TIME ] && [ $NEW_TIME -lt $FUTURE_TIME ]; then ↙      서버에서 읽어온 시각이 ±30분 이내인지 확인.
          •         sleep 1 ↙      타임서버에서 해킹 시도로 오인하는 것을 방지하기 위해 1초간 쉼.
          •         /usr/bin/rdate -s -p $TIMESERVER ↙     확인된 타임서버에서 시각을 읽어와 시스템 시각으로 설정함.
          •         [ "$?" -eq 0 ] && /sbin/clock -w ↙          시스템 시각을 하드웨어 시각으로 설정함.
          • fi ↙
          • echo "($NEW_TIME) Sync Time : OK" >> /var/log/sync_time.log  ↙     정상적으로 수행했음을 알림.
          • rdate는 RFC868에서 정의한 TCP/UDP 37번 포트를 사용, NTP는 SNTP 프로토콜에서 정의한 TCP/UDP 123번 포트를 사용한다.
          • rdate의 경우 서버는 'time-tcp'(TCP daemon), 'time-udp'(UDP daemon)를 사용하고 client는 rdate를 사용한다.
          • rdate로 서버에 접속하면 서버는 32비트의 바이너리 숫자를 보내주고 접속을 끊는다.  이 숫자는 1900년 1월 1일 0시 0분 0초를 기준으로 현재까지의 시간을 '초' 단위로 환산한 값이다.  (프로그래밊을 할 때는 C가 1970년부터 계산하므로 그 차이값을 빼주고 계산해야 한다.)
          • 참고로 좀 더 정밀한 시간 설정을 위해서는 NTP(Network Time Protocol)의 ntpdate를 사용하면 된다.  
          • NTP는 계층적 구조를 가지고 있어서 체계적이고 정확한 동기화가 가능하다.  Server는 ntpd를 사용하고, client는 ntpdate를 사용한다.
        • 추가적으로 rc.local의 부팅시 시간 동기화 부분을 여기에서 작성한 스크립트를 사용하도록 수정한다. (파일 링크 : rc.local )
          • ......
          • sleep 2 ↙
          • /etc/cron.daily/sync_time ↙
          • ......

 

    • DDNS update
      • 여기에서는 유동 IP를 이용하는 서버를 외부에서도 접근할 수 있도록 하기 위해서 dynmic DNS를 사용한다.
      • 대표적인 서비스 제공 사이트로는 www.dyndns.org가 있다.
      • 이 사이트에 가입하고 1시간 단위로 유동 IP를 업데이트 해 줌으로써 안정적인 domain name을 무료로 사용하도록 한다.
      • 참고로 dyndns에서는 35일 이상 ip를 업데이트하지 않으면 domain name을 삭제한다.  고정IP 대상의 서비스는 유료이다.
      • Update 스크립트는 dyndns에서 공식 추천하는 스크립트를 사용한다.  (링크 : http://ddclient.sourceforge.net/index.php?page=main  )
      • 스크립트 프로그램 설치
        • tar  xvjf  ddclient-3.6.7.tar.bz2 ↙
        • cd ddclient-3.6.7 ↙
        • chmod 700 ddclient ↙    보안을 위해 접근을 제한한다.
        • cp ddclient /usr/sbin ↙    스크립트 프로그램을 복사한다.
        • mkdir /etc/ddclient ↙    설정파일 디렉토리를 만든다.
      • ddclient 설정 파일 제작 (파일 링크 : ddclient.conf )
        • cat >  /etc/ddclient/ddclient.conf ↙    설정파일을 작성한다.
        • syslog=yes ↙     로그파일(/var/log/messgaes)에 로그를 남긴다.
        • mail=root ↙     정상 종료시 실행 결과를 root에게 메일로 보낸다.
        • mail-failure=root ↙    오류 발생시 실행 결과를 root에게 메일로 보낸다.
        • pid=/var/run/ddclient.pid ↙     Daemon으로 실행할 때 Process ID를 지정된 파일에 저장한다.
        • use=web, web=checkip.dyndns.org/, web-skip='IP Address' ↙     현재 자신이 부여받은 IP를 web으로 확인한다.
        • login=chogory ↙     Dyndns의 ID.
        • password=<removed> ↙     Dyndns의 비밀번호.
        • server=members.dyndns.org \ ↙     Dyndns를 사용할 서버.
        • protocol=dyndns2 \ ↙     Dyndns에서 사용할 프로토콜.
        • chogory.mine.nu ↙     사용할 domain name.
        • ctrl + d ↙
        • chmod 600 /etc/ddclient/ddclient.conf ↙    보안을 위해 접근을 제한한다.
      • 정기적으로 업데이트되도록 crontab에 등록 (파일 링크 : ddns_update )
        • cat > /etc/cron.hourly/ddns_update ↙
        • #!/bin/bash ↙
        • /usr/sbin/ddclient  -quiet  -force ↙
          • 참고 : -queit (화면에 아무것도 출력하지 않는다.  반대로 상세 출력은 -verbose), -force (update가 필요없는 상황이더라도 update를 강행한다).
        • ctrl + d ↙
        • chmod 700 /etc/cron.hourly/ddns_update ↙
        • ddclient 독립적으로 daemon 방식의 운영이 가능하지만 이렇게 하면 ddclient가 계속 가동되는 문제점이 있다.  
        • 이는 자원점유율과 보안 위협 측면에서 크게 바람직하지는 않으므로, 이 글에서는 daemon보다는 cron을 이용한 순간적인 실행이 되도록 설정했다.



출처 - http://community.365managed.com/?document_srl=936








crontab 이란?
서버 스스로 정해둔 명령을 일정 기간마다 실행하도록 하는 것입니다.

사용형식

crontab [ -u 사용자 id] 파일
crontab [-u 사용자 id] { -l | -r | -e}

# crontab -l : 예약된 작업리스트
# crontab -e : 예약된 작업 수정
# crontab -r : 예약된 작업 삭제

cron 실행 확인
# ps -ef | grep crond

cron 시작
# /etc/init.d/cron start{restart | stop}

일반사용자에게 crontab 명령어 사용하도록 설정 허가
/etc/cron.allow 여기에 ID 등록

일반사용자의 crontab 명령어사용을 제한
/etc/cron.deny  에 ID를 등록

등록 내용 설정
"분,시,일,월,요일, 실행명령" 순으로 설정

crontab 파일 형식
------    --------  ---------------------------------------------------
필  드    의  미    범  위
------    --------  ---------------------------------------------------
첫번째    분        0-59
두번째    시        0-23
세번째    일        0-31
네번째    월        1-12
다섯번째  요일      0-7 (0 또는 7=일요일, 1=월, 2=화,...)
여섯번째  명령어    실행할 명령을 한줄로 쓴다.
------    --------  ---------------------------------------------------

- 한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
- # 으로 시작하는 줄은 실행하지 않는다 (주석)


/etc 에 아래 특정 폴더를 등록해 놓으면 그 폴더안의 실행 파일을 crontab의 설정 시간 마다 실행 
특정폴더: /etc/cron.hourly   /etc/cron.daily   /etc/cron.weekly   /etc/cron.monthly 


$ crontab -e
# /home 디렉토리를 /BACKUP/home 으로 백업해둠
# 30분, 새벽 4시와 낮 12시, 모든 일, 모든 월, 모든 요일 
30 4,12 * * *  /usr/bin/rsync -avxH --delete /home /BACKUP/home > /dev/null 2>&1

 # 파일/디렉토리 퍼미션 설정
 # 40분, 새벽 1시, 매주 일요일
40 1    * * 0  /root/bin/perm_set.sh   > /dev/null 2>&1

 # 20분마다 실행

 */20 * * * * /shell/mrtg

위는 매일 4:30분과 12:30분에 rsync 명령을, 매주 일요일 1:40분에 perm_set.sh를 실행함을 의미한다.


설정 예

시간 설정에서 몇가지 의미있는 것들을 알아보자.

- '*'표시는 해당 필드의 모든 시간을 의미한다.
- 3,5,7 와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있다.
- 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있다.
- 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다.
  (2~10까지 3간격으로. 즉, 3,6,9를 의미함)

=>  > /dev/null  2>&1 이 무슨 뜻입니까?
  지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는
  뜻입니다. 만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다.

예)
20 2 * * 6 명령어 => 매주 토요일 새벽 2:20
0 4-6 * * * 명령어 => 매일 오후 4,5,6시
5 */2 * * * 명령어 => 매일 2시간간격으로 5분대에
15 1 1 * * 명령어 => 매월 1일 새벽 1:15
30 0 1 1,7 * 명령어 => 1,7월 1일 새벽 0:30

10 2 * * * /app11/minsang/APP/ldap/run.sh > /app11/minsang/APP/ldap/cron_error.log
55 13 * * * /run.sh > /mail_cron_error.log
0,30 8-19 * * * /sendAdmin.sh > /cron_admin_error.log


출처 -  http://hninja.tistory.com/75







Administration Guide Draft/Cron

Contents

 [hide

Scheduling Tasks

Introduction

Fedora provides a cron facility for tasks scheduling. The cron facility is most commonly used for routine system maintenance and other recurring tasks, such as execution of backup scripts at pre-determined intervals. Thecron utility runs as a crond daemon and executes tasks specified in the system or master crontab file - /etc/crontab or users' crontab files which, once created, are installed in the /var/spool/cron directory.

System crontab File

The master crontab file consists of seven fields, in the following order:

FieldMeaningValid value
1Minute0-59
2Hour0-23
3Day of Month1-31
4Month1-12 or jan,feb,mar,etc.
5Day of Week0-7 or sun,mon,tue,etc; where 0 and 7 = Sunday, 1 = Monday...
6username to run the task asAny valid userID on the system
7Task to runAny program found in the PATH which user in the Field 6 has the right to execute
Idea.png
If used, the * symbol in the first five fields represents all valid values for the field.

As specified in the Fedora's default /etc/crontab file:

cat /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

...cron executes run-parts utility which processes all jobs found in /etc/cron.weekly directory, on every Sunday at 04:22.

The top section of the /etc/crontab file is optional and contains the lines which will set the environment variables for the jobs specified in the bottom section of the file. If these variables are not specified, the environment of the user in field 6 is used.

To add additional jobs to the system cron, place them in the /etc/cron.d directory.

User crontab Files

Use the crontab utility to edit, install, remove or view individual user's task schedules.

crontab Usage

Usage:

crontab <filename>

In the example above, the content of the file <filename> must conform to the crontab syntax. The only difference from the system crontab file is that the user crontab files do not contain user field. If the <filename>conforms to the crontab syntax, the crontab file of the user who runs the command will be installed in /var/spool/cron directory, with the user's name as a file name, i.e., if user root runs the command, the crontab file is created as /var/spool/cron/root.

User crontab files are not directly accessible to users, since the /var/spool/cron directory has 700 permissions set. To edit one's own crontab file the user must run the crontab command with an -e option:

crontab -e

The crontab -e may also be used to create the new crontab file. When executed, crontab -e opens the existing or new crontab file in the vim text editor. The altered crontab file is installed once it is written using :woption in vim.

To read the content of the crontab file, run:

crontab -l

To remove the crontab file, run:

crontab -r

To read or manipulate the other user's crontab file, as root run:

crontab -u <username> [options] 

To control which users can run crontab, use the /etc/cron.allow and /etc/cron.deny files. The rules are:

  • If the file /etc/cron.allow exists, add to it the username of the user to grant the access
  • If the file /etc/cron.deny exists, it must not contain the username of the user who needs access to the cron
  • If neither the /etc/cron.allow nor /etc/cron.deny exists, only the root user has access to the cron

Anacron

The anacron utility can be used to periodically schedule jobs on the machines which do not run 24 hours per day. The anacron is controlled by the /etc/anacrontab file. The /etc/anacrontab file has a syntax similar to the/etc/crontab. It consists of two sections:

  • Environment assignments section - where environment variables such as SHELLPATH or MAILTO for the scheduled jobs are set
  • Job description section - where the actual jobs are scheduled

The job description section contains one or more lines, each consisting of four fields, separated by one or more blank space. The four fields are:

FieldMeaningValid value
1Periodn number of days
2Delayn number of minutes
3Job IdentifierAny non-blank character, except /
4Command to runAny shell command

The default /etc/anacrontab file on Fedora:

cat /etc/anacrontab


SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

1        65     cron.daily              nice run-parts /etc/cron.daily
7        70     cron.weekly             nice run-parts /etc/cron.weekly
@monthly 75     cron.monthly            nice run-parts /etc/cron.monthly

...executes the run-parts on all jobs from /etc/cron.weekly directory if it has not run in the last 7 days. run-parts will run with the delay of 70 minutes upon the start of the anacron daemon and use cron.weekly as an identifier for this job in anacron messages.

Additional Information

Related Manuals

Find more information about cron and anacron from the following man pages:

  • cron(8)
  • crontab(1)
  • crontab(5)
  • anacron(8)
  • anacrontab(5)



출처 - http://fedoraproject.org/wiki/Administration_Guide_Draft/Cron



'System > Linux' 카테고리의 다른 글

linux - D-Bus  (0) 2013.08.30
linux - fedora repair filesystem  (0) 2013.08.30
linux - watch and grep  (0) 2013.07.12
linux - Running Additional Programs at Boot Time  (0) 2013.07.02
linux - remmina 소개(remote desktop for linux)  (0) 2013.06.15
Posted by linuxism
,