/home/root/cron_grads.sh
我在我的服务器上创建了一个名为 (chmodded 755) 的 shell 脚本。
此目录中还有更多类似500hPa_p0.gs
(644) 的 grads-scripts。我的主要脚本会创建一个临时文件grads_exec.gs
,在其中填充一些内容,然后500hPa_p0.gs
在执行整个文件之前尝试将内容复制到文件末尾。如果我手动启动它,即使在服务器上,它也能正常工作。
但使用crontab -e
:
42 0,6,12,18 * * * /home/root/grads/cron_grads.sh
... 出现错误。脚本启动,但 grads 说:
cat: 500hPa_p0.gs: File or directory not found
cron_grads.sh
我在#!/bin/bash
其中顶部使用 bash 。crontab -e
还包含SHELL=/bin/bash
。
有任何想法吗?
答案1
这是脚本中的问题cron_grads.sh
。当您手动调用它时,我假设您已进入,/home/root
因此它会运行如下内容:
echo test > grads_exec.gs
cat 500hPa_p0.gs >> grads_exec.gs
但是如果你在 时从 运行该程序/home/oli/
,它会尝试写入/home/oli/grads_exec.gs
和读取/home/oli/500hPa_p0.gs
。这就是 cat 在你的情况下崩溃的原因。
要修复,请明确地将 cd 放入正确的目录(并使用绝对路径):
cd /home/root
echo test > grads_exec.gs
cat 500hPa_p0.gs >> grads_exec.gs
或者到处使用绝对路径:
echo test > /home/root/grads_exec.gs
cat /home/root/500hPa_p0.gs >> /home/root/grads_exec.gs
或者为了安全起见,两者皆可。
答案2
- 尝试对所有命令使用绝对路径或获取 PATH 变量,如下所示:
https://stackoverflow.com/questions/10129381/crontab-path-and-user