[완료] 옵션이 포함된 명령어에 alias 설정이 가능한가요?

허성규의 이미지

안녕하세요~!

시스템 관리한지 이제 겨우 1년 3개월된 풋내기 입니다. ㅋㅋ

오늘 매우 식은땀 흐르는 경험을 했는데요, cron 관련입니다.

1년 3개월동안 이런 일은 없었는데, 오늘 웹개발자 한명이 개발자 계정에 등록된 cron을

crontab -r 명령으로 깨끗하게 날려주시는 일이 발생하였습니다.

때마침 cron 목록도 백업을 안하고 있던차에, 매우 곤란해 하다 문득 작년 12월 31일

IDC이전 하기 직전에 모든 서버의 cron 리스트를 한번 백업 받아놓은게 있다는것을 기억해 내고는

그걸로 무사히 복구는 시켜 놨습니다.

복구는 했지만 앞으로 또 이런 일이 일어나지 않으리라는 보장이 없고, 불행히도 r키는 e키 바로 옆에 붙어 있죠..

그래서 crontab -r 명령을 원천적으로다가 봉쇄를 해 볼까 합니다.

alias 설정을 해 보려 했는데 옵션이 끼이니까 이거 쉽지 않네요.

이와 관련된 지식이나 노하우가 있으시다면 작은 가르침을 내려 주세요~

knight2000의 이미지

http://kldp.org/node/42492

위의 글 참조.

===== ===== ===== ===== =====
knight2000 of SALM.
SALM stood for SALM Ain't a Life Model.
SALM is not the life model, but SALM is just the life.

===== ===== ===== ===== =====
knight2000 of SALM.
SALM stood for SALM Ain't a Life Model.
SALM is not the life model, but SALM is just the life.

허성규의 이미지

알려주신 페이지를 참고하여 이리저리 시도를 많이 해 봤는데, 쉽지가 않군요.
crontab -r 명령을 echo "-r 옵션은 사용 하실 수 없습니다." 메시지 출력하는걸로 하려는데,
"-r" 이녀석때문에 골머리가 아프군요. ㅋ

dell mini9 에 gentoo stage1 부터 깔기.

블루스크린의 이미지

.

-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.

eezen의 이미지

alias crontab='crontab -i'

이걸로 대충 해결되는 문제 아닐까요?

허성규의 이미지

개발자들이 -r 옵션만 사용하지 못하도록 추가적인 설정을 하고 싶습니다.
개발자들도 각자의 cronjob을 등록하기 때문에 -e, -l 옵션등은 사용을 해야 하거든요.
alias crontab -r = echo "exit"; 또는 function crontab -r {} 등은 안되더라구요.
' , " 로 감아줘두 안되구..
function 을 잘 이용하면 될것두 같은데..
shell 스크립트를 좀 공부해 봐야 겠네요. ㅋ

dell mini9 에 gentoo stage1 부터 깔기.

eezen의 이미지

i 옵션을 쓰더라도 e나 l을 쓸 수 없는 것이 아닙니다.
crontab -e 나 crontab -ie 는 똑같습니다.
다만 crontab -ir 이 되면 정말로 지울거냐고 물어본다는 점이 달라지는 것이지요.

강제로 막을 수는 없지만 실수로 지우는 것을 막는 목적에는 i 옵션으로 충분합니다.
간단한게 있는데 멀리 생각하신다는 느낌인데요......

허성규의 이미지

gentoo 사용중입니다.. ㅋ

# crontab -i
crontab: invalid option -- i
crontab: usage error: unrecognized option
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)

dell mini9 에 gentoo stage1 부터 깔기.

eezen의 이미지

# crontab -i
crontab: usage error: file name must be specified for replace
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
-s (selinux context)

# rpm -qf `which crontab`
cronie-1.2-7.fc10.x86_64

codebank의 이미지

cron도 여러가지 종류가 있네요.
저도 gentoo를 사용해서 한번 cron의 종류를 보니...

anacron, bcron, cronbase, dcron, fcron, incron, ...

종류도 참 많네요.
보통 gentoo를 설치하면 설치문서를 많이 참고하는데 설치문서에는 vixie-cron을
설치할 것을 권하고 있습니다.
아마 gentoo에서 설치한 cron에는 해당 옵션이 없는게 아닌가 생각되네요.
필요하면 바꿀 수는 있을텐데... 어느 cron에 -i옵션이 있는지는 저도 잘 모르겠네요.
------------------------------
좋은 하루 되세요.

------------------------------
좋은 하루 되세요.

허성규의 이미지

gentoo 이외의 리눅스를 사용 안한지 오래 되다 보니
cron 패키지가 여러개 있다는걸 잠시 망각했네요.

# epm -qi vixie-cron
Name : vixie-cron
Version : 4.1
Release : 10 Slot: 0
Install date: Fri Feb 1 09:10:40 2008 Build Host: web0
Group : sys-process License: as-is
Size : 96539
Packager : vapier
URL : ftp://ftp.isc.org/isc/cron/
Summary : Paul Vixie's cron daemon, a fully featured crond implementation

vixie-cron 에서는 i 옵션이 지원되지 않네요..

dell mini9 에 gentoo stage1 부터 깔기.

eezen의 이미지

잘못 올린 댓글인데 지울 수가 없어서...

whitelazy의 이미지

스크립트 하나 만드시고 크론 명령어 이름바꾸고 스크립트로 연결되게 하시는건??

넘 무식한가 ㅠㅠ

허성규의 이미지

나쁘지는 않은 방법이지만, 개발자가 접속하는 서버가 많은데, 명령어 이름 바꾸고 crontab 이라는 스크립트를 만드는건
추후 패키지관리에서 (업데이트등..) 더욱 번거로울 것 같아 시도하지 않았습니다. ㅎ

dell mini9 에 gentoo stage1 부터 깔기.

redneval의 이미지

펄 스크립트를 이용한 방법

1. 다음과 같이 forbid_r_flag.pl 을 작성함.

#!/usr/bin/perl
$n = grep {$_ eq '-r'} @ARGV;
if($n >= 1) {
    print "Don't use -r flag, Stupid.\n";
}
else {
    system("@ARGV");
}

2. /usr/local/sbin 등의 루트의 PATH에 forbid_r_flag.pl 을 복사하고, 실행권함을 줌.

3. alias 를 적당한 곳에 설정.

alias crontab='forbid_r_flag.pl crontab'

--------------------Signature--------------------
Light a candle before cursing the darkness.

은빛돋움/Pfed 프로젝트 : http://sites.google.com/site/unbitfonts/

허성규의 이미지

역시 스크립트 언어를 좀 공부해야 겠군요~

(^^) (__)

dell mini9 에 gentoo stage1 부터 깔기.

bushi의 이미지

일 좀 있을 것 같은 bash

[bushi@rose net]$ function crontab_r() { A="$*"; if [ "${A#-r}"x == "$A"x ]; then /usr/bin/crontab $*; else echo "denied" ; fi;}
[bushi@rose net]$
[bushi@rose net]$ alias crontab=crontab_r
[bushi@rose net]$ 
[bushi@rose net]$ crontab --help
/usr/bin/crontab: 부적절한 옵션 -- -
/usr/bin/crontab: usage error: unrecognized option
usage:	/usr/bin/crontab [-u user] file
	/usr/bin/crontab [-u user] [ -e | -l | -r ]
		(default operation is replace, per 1003.2)
	-e	(edit user's crontab)
	-l	(list user's crontab)
	-r	(delete user's crontab)
	-i	(prompt before deleting user's crontab)
	-s	(selinux context)
[bushi@rose net]$ 
[bushi@rose net]$ crontab -r
denied
[bushi@rose net]$ 
[bushi@rose net]$ crontab -l
no crontab for bushi
[bushi@rose net]$
[bushi@rose net]$ which crontab
alias crontab='crontab_r'
[bushi@rose net]$

/etc/profile.d/crontab_r.sh 정도로 두시면 되겠고요,
재귀적인 호출을 막으려다보니 /usr/bin/crontab 이라 적어주게됐는데,
이거.. bash 에 옵션이 있던가 명령이 있던가 지시자가 있을 겁니다.
내부 명령이 아니라 외부명령을 우선하게하는.
찾기 귀찮아서 그냥 패스를 지정해버렸습니다.

일반적인 경우는 아닙니다.
제대로하려면 getopt 를 사용해서 개별해석해야하지만,
crontab 자체가 -lr 처럼 옵션을 붙여쓰는 것을 지원하지 않기에 그냥 패턴만 찾아도 될 것 같아 저리했습니다.

OTL

ganadist의 이미지

명령 맨 앞에 \를 입력하면 외부명령을 실행합니다.

$ \ls

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.