我有这份报告,但我不明白为什么它不识别 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
文件中。