crontab으로 에코 컬 표준 출력

crontab으로 에코 컬 표준 출력

이것은 내 Github 계정에 저장한 crontab 스키마입니다.

source ~/.profile
0 0 * * *
# More cron commands

연습으로 stdout 데이터를 curlcrontab에 연결해 보았습니다(Github 경로를 범용 모드로 변경했습니다).

1)간단한 파이프를 사용하려고 합니다.

curl https://raw.githubusercontent.com/user/repo/master/cronjobs | crontab

다음 오류로 인해 이 작업이 실패합니다.

"-":0: 나쁜 분

crontab 파일이 잘못되어 설치할 수 없습니다.

2)구분 기호를 사용해 보았습니다.

curl https://raw.githubusercontent.com/user/repo/master/cronjobs | cat > crontab

다음 오류로 인해 이 작업이 실패합니다.

수정사항이 없습니다.

삼)curl출력 을 crontab.

echo "curl $(https://raw.githubusercontent.com/user/repo/master/cronjobs)" | crontab

다음 오류로 인해 이 작업이 실패합니다.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0...: command not found
100   505  100   505    0     0    804      0 --:--:-- --:--:-- --:--:--   804
(23) Failed writing body

stdout에서 crontab으로 데이터를 보내는 세 가지 다른 방법을 시도했지만 아무것도 작동하지 않은 것을 볼 수 있습니다. 파일 대신 crontab에 직접 전달하려면 cron.d어떻게 해야 합니까?

답변1

"-":0: bad minute
errors in crontab file, can't install.

crontab이 오류는 제공된 파일/데이터가 올바른 crontab 파일이 아닌 경우 발생합니다. (거기 있는 숫자에 줄 번호가 있는 것 같은데 왜 가끔 0이 나오는지 모르겠네요.)매뉴얼 페이지crontab(5)설명하다:

crontab의 활성 행은 환경 설정 또는 cron 명령일 수 있습니다. 환경 설정은 다음과 같습니다. name = value 등호(=) 주위의 공백은 선택 사항입니다.

cron 명령의 형식은 V7 표준과 유사하며 많은 상향 호환 확장이 있습니다. 각 줄에는 5개의 시간 및 날짜 필드가 있고 그 뒤에 사용자 이름(시스템 crontab 파일인 경우), 명령이 옵니다.

따라서 귀하가 입력한 내용은 다음 중 하나가 아닐 수도 있습니다.

좋아요:

$ crontab <<EOF
SHELL=/bin/bash
* * * * * echo foo
EOF

이것은 아니다:

$ echo "foo" |crontab
"-":1: bad minute
errors in crontab file, can't install.

2) 이것은 here-doc가 아니며, 추가 cat이 포함된 파이프와 파일로의 리디렉션입니다 crontab. 이름이 지정된 명령은 실행되지 않습니다 crontab.

curl https://raw.githubusercontent.com/user/repo/master/cronjobs | cat > crontab

3) 그러면 셸에서 오류가 발생합니다. 아마도 이라는 명령이 없을 것입니다 https://raw.githubusercontent.com/user/repo/master/cronjobs.

echo "curl $(https://raw.githubusercontent.com/user/repo/master/cronjobs)" | crontab

답변2

첫번째 줄,

source ~/.profile

crontab에서 유효한 줄이 아닙니다:

$ echo "source ~/.profile" | crontab
"-":0: bad minute
errors in crontab file, can't install.

~/.profile로그인 셸을 실행하는 것처럼 소스 코드를 얻으 려면 다음과 같이 셸 스크립트를 실행하는 것이 좋습니다.

0 0 * * * bash -l /path/to/script.sh

bash(for , for sh -l) 대신 /bin/sh또는 아마도

SHELL=/bin/bash
0 0 * * * source ~/.profile && bash /path/to/script.sh

그러나 ~/.profilecron 작업에서 리소스를 얻으려는 경우는 드뭅니다. 스크립트에 설정해야 하는 특정 환경 변수(또는 변수 세트)가 있는 경우 스크립트에서 이를 설정하여 스크립트 자체 포함을 유지하는 것이 가장 좋습니다.

또 다른 방법은 별도의 환경 파일을 사용하고 스크립트를 실행하는 것입니다.

0 0 * * * BASH_ENV="$HOME/script.env" /path/to/script.sh

관련 정보