이 보고서가 있지만 왜 gradle 명령을 인식하지 못하는지 이해할 수 없습니다... 저는 cron을 처음 사용합니다. 도움을 주셔서 감사합니다!
From [email protected] Sun Dec 13 04:02:01 2020
Return-Path: <[email protected]>
X-Original-To: ubuntu
Delivered-To: [email protected]
Received: by vps-a29e040b.vps.ovh.net (Postfix, from userid 1000)
id EF0278157A; Sun, 13 Dec 2020 04:02:01 +0000 (UTC)
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <ubuntu@vps-a29e040b> ./myscript.sh
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/ubuntu>
X-Cron-Env: <LOGNAME=ubuntu>
Message-Id: <[email protected]>
Date: Sun, 13 Dec 2020 04:02:01 +0000 (UTC)
TERM environment variable not set.
./myscript.sh: line 4: gradle: command not found
답변1
cron
사용하기는 매우 쉽지만 알아야 할 몇 가지 기능이 있습니다. 간략한 요약은 다음과 같습니다.
1. cron
업무 환경이 다릅니다.
cron
작업이 귀하와 다른 환경에서 실행되고 있습니다.대화형 쉘. 경로는 환경의 일부입니다. 이것이 문제의 원인일 수 있습니다. PATH가 gradle
사용된 PATH에 없을 수 있습니다 cron
. 이로 인해 cron
모든 작업에 문제가 발생할 수 있습니다.
해결 방법: 이 문제는 일반적으로 모든 명령에 대해 전체 경로 지정을 사용하여 해결할 수 있습니다.
대신에:
0 2 * * * gradle
이것을 사용하십시오 :
0 2 * * * /full/path/to/gradle
2. cron
자원 가용성에 대한 이해 부족
cron
작업을 실행하기 전에는 작업을 실행하는 데 필요한 리소스의 가용성이 확인되지 않습니다. 이는 일반적으로 cron
시작 시 작업을 실행할 @reboot
때(예: 도구 사용) 발생합니다 . 이에 대한 예로는 시작 시 실행되고 네트워크 리소스에 대한 액세스가 필요한 작업이 있습니다.
해결책: 이 문제는 일반적으로 sleep X
작업 앞에 다음 명령을 추가하여 해결할 수 있습니다.
@reboot ( /bin/sleep 30; /home/myhome/myprog.sh )
3. cron
작업의 런타임 오류는 보고되지 않습니다.
cron
터미널에 접속할 수 없으므로 stderr
으로 이동하세요 /dev/null
. 오류를 확인하려면(항상 그렇습니다!) stderr
파일로 리디렉션하면 됩니다. 한 가지 방법은 다음과 같습니다.
0 2 * * * /home/myhome/dosomething.sh > /home/myhome/cronjoblog 2>&1
이렇게 하면 stdout
모든 (1)이 로 /home/myhome/cronjoblog
, stderr
(2)가 stdout
(2>&1)로 리디렉션됩니다. 모든 출력은 파일에 저장됩니다 cronjoblog
.