Linux

Crontab 脚本执行无结果排查

·5 分钟阅读·1866 字

梳理Crontab 脚本执行无结果的故障定位流程、关键命令与处理方案

📋 目录

Crontab 脚本执行无结果排查

1. 看你手动的 PATH

echo $PATH


### 解决方案(二选一)

1. **脚本开头直接写完整 PATH**(最稳)

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin


2. **命令全部使用绝对路径**

2. 错误

java -jar test.jar

3. 正确

/usr/bin/java -jar test.jar


---

## 3. **第三步:检查脚本里的**相对路径**(15% 问题)**

crontab 执行时,**当前工作目录是 /**不是 `/root`,不是 `/home`,是 `/`!

你脚本里写:

echo “test” > log.txt


实际生成路径是:

/log.txt


不是你以为的 `/root/log.txt`!

### 解决方案

**所有文件路径必须写绝对路径**

/root/app.log

/opt/data/run.pid


---

## 4. **第四步:检查是否缺少 #!/bin/bash**

很多人脚本第一行忘写,手动能跑,crontab 不执行!

4. 必须第一行

#!/bin/bash


---

## 5. **第五步:检查脚本权限 + 可执行**

chmod +x /root/test.sh


---

## 6. **第六步:检查是否需要交互/终端**

有些命令需要终端:

- `su`

- `sudo`

- `ssh`(未做免密)

- `read`

- 某些需要交互的命令

**crontab 无终端,会直接卡住/失败。**

---

## 7. **第七步:检查 crontab 服务是否运行**

systemctl status crond

systemctl restart crond


---

## 8. **第八步:查看系统 cron 日志(最终杀招)**

tail -f /var/log/cron


能看到:

- 任务是否执行

- 执行时间

- 执行用户

- 是否报错

这是**系统级铁证**。

---

# 三、最常见 5 种错误模板(直接对照)

## 1. 找不到命令

command not found: java


→ **PATH 问题**

## 2. 没有那个文件或目录

no such file or directory


→ **相对路径问题**

## 3. 权限不够

permission denied


→ **chmod +x,或目录权限**

## 4. 脚本执行了,但没效果

→ **输出没重定向,你以为没执行**→ **加 >> /root/log 2>&1**

## 5. 手动正常,crontab 完全没反应

→ **99% 是环境变量 + 相对路径**

---

# 四、万能正确模板(以后直接复制)

## 1. 脚本模板 test.sh

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

cd /root

echo “执行成功” >> /root/result.log


## 2. crontab 模板
          • /root/test.sh >> /root/cron.log 2>&1

---

# 五、面试标准答案(可直接存入知识库)

tags: #Linux #crontab #定时任务 #面试 #排查

题型:实操排查

难度:中级

题目:root定时脚本手动正常,crontab执行无结果,排查思路?

精简答案:

  1. 加输出重定向,捕获错误日志;
  2. 检查PATH环境变量,crontab环境极简,命令需绝对路径;
  3. 检查相对路径,crontab工作目录是/,必须用绝对路径;
  4. 检查脚本头#!/bin/bash、执行权限;
  5. 查看/var/log/cron系统日志确认任务是否调度;
  6. 检查是否需要交互终端,crontab无终端。 核心原因: 手动执行环境完整,crontab环境极简,导致路径、环境、目录不匹配。

---

## 你要我继续讲:

1. **Linux 定时任务高级用法**

2. **crontab 秒级执行方案**

3. **flock 防止重复执行**

4. **systemd timer 替代 crontab**

直接说数字就行!

---

> [!info] 关联文档
> - [[Shell 基础]]:Shell 脚本
> - [[Linux 基础]]:定时任务
Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro