스크립트에서 cron에 행 추가


답변:


49

다음과 같이 현재 사용자 crontab의 맨 아래 줄을 에코 할 수 있습니다.

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -

+1 cuz 당신이 나를 이겼습니다 (테스트하는 동안 스크립트 오류가 발생했습니다 : D). 당신이 추가해야 할 한 가지 생각 : 시스템 cron에 변경된 정보를 알려야합니다 .
Rinzwind

나는 이것이 대답해야 할 경주라는 것을 알고 있었다! 당신은 cron에 통보해야한다는 것이 옳습니다. 그렇기 때문에 명령을 crontab의 끝에 에코 할 수 없습니다. 위의 스크립트가 작동하고 cron이 명령 실행을 시작했는지 테스트했습니다.
Richard Holloway

13
아 그리고 나는 crontab그 사용자에 대해 아직 존재하지 않으면 이것이 오류라고 생각합니다 (?)
Rinzwind

7
이 경우 crontab 사용자가 존재하지 않는다는 경고 메시지가 표시되지만이를 생성합니다. 귀하의 의견을 통찰력있게 찬성합니다.
Richard Holloway

3

crontab에서 값을 편집하려면 다음 라인을 따라 무언가를 수행하십시오.

$ crontab -l | sed -e 's/foo/bar/' | crontab -

분명히 변경하려는 줄과 만 일치하도록 대체에주의해야합니다. 그렇지 않으면 모든 foos것이 bars(이 예에서) 로 변경됩니다 .

이 방법의 장점은 전체 crontab을 바꾸지 않는다는 것입니다. (슬레지 해머가 아닌 은유적인 족집게)

sed 대신 편집 명령을 사용할 수 있습니다 . 예를 들어, ed 를 사용 하여 다음과 같이 시작하는 라인을 수정하려는 경우 :

2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1

이 줄이 여러 줄에 있거나 다른 시스템에서 업데이트 할 많은 crontab이 있고 그 줄이 용어가있는 유일한 줄이라고 알고 flitch있다고 가정하십시오.

다음과 같이 보일 수 있습니다.

$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...

지금은 시간의 거의 100 % 인정해야한다 나오지 무엇을 할 것인가 에드 할 것입니다,하지만 그것은 스위스 군용 칼에 여분의 도구를 가지고하는 것이 좋다. ^. ^

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.