이것은 내 Github 계정에 저장한 crontab 스키마입니다.
source ~/.profile
0 0 * * *
# More cron commands
연습으로 stdout 데이터를 curl
crontab에 연결해 보았습니다(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
그러나 ~/.profile
cron 작업에서 리소스를 얻으려는 경우는 드뭅니다. 스크립트에 설정해야 하는 특정 환경 변수(또는 변수 세트)가 있는 경우 스크립트에서 이를 설정하여 스크립트 자체 포함을 유지하는 것이 가장 좋습니다.
또 다른 방법은 별도의 환경 파일을 사용하고 스크립트를 실행하는 것입니다.
0 0 * * * BASH_ENV="$HOME/script.env" /path/to/script.sh