Cron UbuntuでGradleを使用することはできません。

Cron UbuntuでGradleを使用することはできません。

このレポートはありますが、なぜ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にリダイレクトするだけです。 1つの方法は次のとおりです。

0 2 * * * /home/myhome/dosomething.sh > /home/myhome/cronjoblog 2>&1

これstdoutにより、すべての(1)がに/home/myhome/cronjoblogstderr(2)がstdout(2>&1)にリダイレクトされます。すべての出力はファイルに保存されますcronjoblog

追加読書cron

関連情報