无法将 Gradle 与 Cron Ubuntu 一起使用

无法将 Gradle 与 Cron Ubuntu 一起使用

我有这份报告,但我不明白为什么它不识别 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作业在与您不同的环境中运行交互式外壳。路径是环境的一部分。这可能是导致您的问题的原因: 的 PATHgradle可能不在 . 使用的 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文件中。

进一步阅读cron

相关内容