2013-12-23 7 views
4

Upstart를 사용하여 일정대로 작업을 실행할 수 있습니까?cron 대신 Upstart 사용

0 3 * * * /usr/bin/node ~/update.js 
0 9 * * * /usr/bin/node ~/update.js 
0 12 * * * /usr/bin/node ~/update.js 
0 15 * * * /usr/bin/node ~/update.js 

나는 갑자기 출세하여이 작업을 실행할 수있는 방법 :

지금 내 crontab을이 작업을? 가능한가?

+3

신생 동력이란 무엇입니까? Crontab에는 재부팅 후 실행될 수있는 옵션이 있습니다. 이를 위해,'@reboot/usr/bin/node ... '를 사용하십시오. – fedorqui

+0

cron 대신 Upstart를 사용하여 일정에 따라 작업을 실행하고 싶습니다. – inetbug

+0

cron을 사용할 때 잘못된 점이 있습니까? Upstart는 이벤트 기반 init 데몬이며 특정 이벤트 *에서 특정 작업 시간에 작업을 실행하지 않습니다. – Braiam

답변

1

이 Bash를 이용한 크론 같은 행동은 매우 순진 구현은 다음과 같습니다

description "cron-like naive backup service" 
author "Reut Sharabani" 

stop on [016] or backup-stop 

start on backup-start or filesystem 

# restart for 20 times, every 5 seconds, if crashes 
respawn 
respawn limit 20 5 

script 
    # actual backup 
    logger "starting backup" 

    # folder to back-up to 
    BKP_FOLDER="/home/XXXX/YYYY/backups" 

    # backups log file 
    LOG_FILE="/home/XXXX/YYYY/backups.log" 

    # logger "entering backup loop" 
    while true 
    do 

     # verify log file exists 
     if [ ! -e "$LOG_FILE" ] 
     then 
      logger "log file for backup service did not exist, creating one in "$LOG_FILE 
      echo "Backup logs: " > $LOG_FILE 
     fi 
     # verify destination folder exist 
     if [ ! -d "$BKP_FOLDER" ] 
     then 
      logger "Backup service folder did not exist, creating it in "$BKP_FOLDER 
      mkdir $BKP_FOLDER 
     fi 


     # logger "checking last backup" 

     # generate current backup, makes backups daily 
     # (if we changed to +%M-%d-%m-%y it'd be per minute...) 
     current_bkp="`date +%d-%m-%Y`" 

     # generate last backed-up file 
     last_bkp=`tail -1 $LOG_FILE` 

     # check if this file wasn't already backed-up 
     logger "checking $current_bkp against last status: $last_bkp" 

     if [ "$last_bkp" = "$current_bkp finished" ] 
     then 
      logger "date $current_bkp already backed up!" 
      # check for existing backup every hour 
      sleep 600 
     else 

      # make sure a backup process isn't currently working! 
      # a backup process is any process zipping into XXXX for the matter... 
      if [ "`pgrep -f 'zip.*XXXX'`" = '' ] 
      then 
       # no process is running, back things up 
       echo "$current_bkp started" >> $LOG_FILE 
       logger $current_bkp" is being backed up..." 
       # zip all folders in this list, array definition 
       # does not work in upstart for some reason... 
       zip -r $BKP_FOLDER"/"$current_bkp".zip" '/home/.../CENSORED' '/home/.../CENSORED' '/home/.../CENSORED' 
       echo "$current_bkp finished" >> $LOG_FILE 
       logger "date $current_bkp backed up!" 

      else 
       # backup process is still running, do nothing 
       logger "Backup stopped because process $BKP_PROC was already backing up things..." 
       logger "process info:" 
       logger "`ps aux | grep $BKP_PROC | grep zip`" 
      fi 

     fi 
    done 
end script 

이 예는 당 일이지만, 쉽게 당신이 date 명령을 사용하여 원하는 단위로 변경할 수 있습니다.

관련 대기 시간을 사용해야합니다. 나는 나의 필요를 위해 충분히 정확한 매일 백업을 위해 10 분을 사용했다. (자정 이후 몇 분 후에 백업을 시작해야한다.)

는 내가 처음 사용했습니다 (하지만 개별 백업의 역사를 유지하려는 때문에 우편보다 내 요구에 적합)

행운을 빕니다 무엇 인 rsync를 사용할 수 있습니다 잊지 마세요! :-)