용오름체험휴양마을영농조합법인 / 홍천 용오름캠핑장 팸투어 다녀왔어요.

용오름체험휴양마을영농조합법인 / 홍천 용오름캠핑장 팸투어 다녀왔어요. 강원도 홍천 서석면에 위치해있으며 1급수 용오름계곡 바로 옆에 있습니다.홍천군 1등 마을로 마을에서 직접 관리하는 용오름캠핑장,펜션 10개를 운영하고 있으며 각종 모임이 가능하도록 식당,회의실,야외무대가 설치되어 있습니다.홍천군 1등 마을답게 캠핑장,펜션 마을 전지역 wi-fi 사용이 가능하며 매년 봄 팸투어 실시, 여름엔 마을에서 재배한 홉으로 직접만든 맥주축제,마리소리 음악축제 를 열고 있습니다.계곡의 경우 수심이 다양하여 다이빙 포인트가 2곳이 있으며 아이들이 안전하게 물놀이를 할 수 있는 곳도 여러 곳 있습니다. 홍천 용오름캠핑장 팸투어 다녀왔어요. 요즘은 농산촌체험마을에서 캠핑과 여러프로그램을 같이 하는 곳이 추세더라고요. 아미산이 둘러쌓인 청정계곡이 흐르는 아름다운 용오름체험휴양마을 에서 운영하는 홍천 용오름캠핑장 팸투어 다녀왔어요. 테크 앞 강이... 붕어빵 가족의 담너머 세상구경 https://m.blog.naver.com/1092119/220711235599 가을여행-홍천여행- 홍천 용오름 마을 첫째날 여행의 계절 가을입니다. 요즘 저희는 강원도에 꽃힌 상태인지라...카페 행복한 이티씨와 함께하는 홍천 용오름 마을 1박2일 체험에 참가를 하였답니다! 평소 체험 시간보다 조금 늦은 출발을 해서 차가 밀리지 않으려나... 귀여운 단지 https://m.blog.naver.com/sanguidan/50181593653 용오름마을 캠핑장 여름휴가의 시즌이다.. 강원도의 계곡과 시원함을 만끽하기 위해 캠핑장을 검색하다 우연히 알게 된 홍천의 용오름 캠핑장.. 성수기라 캠핑장 요금들이 사악하다 용오름캠핑장 옆엔 해미르 캠핑장이 있는데... ★살로몬의 잇츠캠핑★ https://m.blog.naver.com/freeguy9040/20163628934 맥주효모로 만든 용오름맥주마을 바쏘 맥주샴푸와 맥주마스크팩... 1988년까지 맥주 원료인

PHP로 리눅스(linux) 크론(cronjob, crontab) 제어하기

PHP로 리눅스(linux) 크론(cronjob, crontab) 제어하기

PHP로 리눅스(linux) 크론(cronjob, crontab) 제어하기

2018-12-19

CentOS에서는 정상적으로 작동하였으나 우분투에서는 에러를 일으켜

명령어가 좀 더 안정적인 것으로 변경됨. 자세한 변경내역 →깃허브

반복된 작업을 알아서 실행해주는 crontab. 로그를 쌓을 때나, 자동 갱신 시스템을 만들 때 등 은근히 많이 쓰이게 된다. 하지만 crontab을 수정할 때마다 항상 불편했는데... 보통 iptables나 dbms처럼 명령어를 통해 cronjob을 등록하고 삭제하는 등의 행동은 수행할 수가 없었다. 항상 crontab -e 라는 명령어를 통해 텍스트에디터형식으로 열고 편집하고 저장하고 하는 식으로 작업했지.

그게 불편해서 php에서 원하는 모든 cronjob행동을 제어할 수 있게 코드로 만들어봤다.

version = '1.0.0'; $this->service_executor = `whoami`; } /** * @breif : returns `crontab -l` result */ public function get_crontab(): array { exec("crontab -l", $output, $exitcode); $result = false; if ($exitcode === 0) { $result = $output; } return $result; }//end of function get_crontab /** * @brief : only returns working cronjobs except for comment and blank */ public function get_listed_cronjob(): array { exec("crontab -l", $output, $exitcode); $result = false; if ($exitcode === 0) { $result = []; foreach ($output as $cronjob_index => $cronjob) { if ($cronjob && (substr($cronjob, 0, 1) != '#')) { $result[] = $cronjob; } else { continue; } } } return $result; }//end of function get_listed_cronjob public function cron_duplication_checker($cron_tag): bool { $listed_cronjob = $this->get_listed_cronjob(); $result = false; if ($listed_cronjob) { foreach ($listed_cronjob as $line => $cronjob) { $cron_duplication_check = strpos($cronjob, '#CRONTAG='.$cron_tag); if ($cron_duplication_check) { $result = true; } } } return $result; }//end of function cron_duplication_checker public function add_cronjob($command, $cron_tag): array { $result = array( 'status' => 'status', 'msg' => 'msg', 'data' => 'data' ); $cron_duplication_check = $this->cron_duplication_checker($cron_tag); $managed_command = 'echo -e "`crontab -l`

'.$command.' #CRONTAG='.$cron_tag.'" | crontab -'; if (!$cron_tag) { $result['status'] = 'INPUT_ERROR'; $result['msg'] = 'cron_tag is required'; $result['data'] = $managed_command; } else if ($cron_duplication_check) { $result['status'] = 'FAILED'; $result['msg'] = 'duplicated cron tag exists'; $result['data'] = $cron_duplication_check; } else { exec($managed_command, $output, $exitcode); $result['data'] = array( 'cron_add_output' => $output, 'cron_add_exitcode' => $exitcode, 'managed_command' => $managed_command ); if ($exitcode === 0) { $result['status'] = 'SUCCESS'; $result['msg'] = 'added new cronjob'; } else if ($exitcode === 127) { $result['status'] = 'ERROR'; $result['msg'] = 'crond is not running or not installed'; } else { $result['status'] = 'ERROR'; $result['msg'] = 'error occurred in progress to register new cron job'; } } return $result; }//end of function add_cronjob public function remove_cronjob($cron_tag): bool { $cron_duplication_check = $this->cron_duplication_checker($cron_tag); $result = false; if ($cron_duplication_check) { exec("crontab -l | sed '/\(.*#CRONTAG=$cron_tag\)/d' | crontab ", $output, $exit_code); if ($exit_code === 0) { $result = true; } } return $result; }//end of remove_cronjob }//end of class CronManager

깃허브에도 등록해놨다. 레포에도 써있다시피 위험한 커맨드에 대한 처리는 안돼있으니(e.g : rm -rf [somethings], halt, reboot, shutdown등등) 알아서 잘 써야 한다... 최대한 심플한 상태로 유지시키기 위해 이런 식으로 작성하였고 #CRONTAG라는, cronjob 맨 뒤에 붙는 주석형식의 태그를 이용하여 관리하기 쉽게 하였다.

어디든 막 갖다 써도 되고 퍼가도 되지만 해당 코드를 사용함으로서 생긴 문제는 책임지지 않는다... 새로운 아이디어나 개선사항 모두 환영하는 바이다. 자세한 사용법은 깃허브를 참조하면 된다!

from http://this-programmer.com/122 by ccl(S) rewrite - 2020-03-06 08:20:13

댓글

이 블로그의 인기 게시물

[2020 정보처리기사 실기 - 프로그래밍 언어 활용] 2. 언어 특성 활용...

phpmyadmin 설치 차분히 따라해보자

용오름체험휴양마을영농조합법인 / 홍천 용오름캠핑장 팸투어 다녀왔어요.