You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cron任务执行Shell脚本生成空文件问题求助

crontab执行Shell扫描脚本生成空文件的解决方法

问题原因分析

你的脚本在命令行正常但crontab执行出空文件,主要踩了这几个坑:

  1. crontab环境PATH受限:默认PATH仅包含/usr/bin:/bin,如果依赖命令不在这个路径里会直接执行失败;且非交互式环境下,shell的默认配置不会加载,可能导致命令调用异常。
  2. sudo需要交互验证:crontab是后台无交互环境,执行sudo时会触发密码请求,但无人输入,导致nmap根本没运行,后续过滤步骤自然没有内容,生成空文件。
  3. 重复扫描的冗余与不一致:脚本里调用了两次network-scan,不仅浪费扫描资源,两次扫描的结果还可能不一致,导致IP和MAC文件不匹配。
  4. 工作目录不明确:crontab默认在用户主目录执行脚本,生成的临时文件位置可能和你预期不符,后续合并操作容易出错。

修正后的脚本

先解决sudo免密问题:用visudo编辑sudoers文件,添加一行(替换成你的用户名):

your_username ALL=(ALL) NOPASSWD: /usr/bin/nmap

然后修改脚本如下:

#!/bin/bash

# 替换成你的脚本实际存放路径,确保所有文件生成在指定目录
SCRIPT_DIR="/home/your_username/scripts"
# 如果切换目录失败直接退出,避免后续操作出错
cd "$SCRIPT_DIR" || exit 1

# 更可靠的本地IP获取方式,避免hostname -I在非交互式环境失效
IPADDRESS=$(ip addr show | grep inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d/ -f1 | head -n1)

# 用绝对路径调用命令,彻底规避PATH问题
NMAP="/usr/bin/nmap"
SUDO="/usr/bin/sudo"

network-scan(){
    # 更严谨的参数非空判断
    if [ -n "$1" ]; then
        "$SUDO" "$NMAP" -sn "$1"
    else
        "$SUDO" "$NMAP" -sn 192.168.1.0-255
    fi
}

# 只执行一次扫描,结果存临时文件,避免重复扫描的冗余和不一致
SCAN_TEMP=$(mktemp)
network-scan > "$SCAN_TEMP"

# 从临时文件提取IP地址,优化正则表达式匹配更准确
grep -i 'Nmap scan report' "$SCAN_TEMP" | \
    sed -e 's/ /\n/g' -e 's/[()]//g' | \
    grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -v "$IPADDRESS" > ip_addresses

# 提取MAC地址
grep -i 'MAC Address:' "$SCAN_TEMP" | \
    awk '{print $3}' > mac_addresses

# 合并IP和MAC到带时间戳的结果文件
paste ip_addresses mac_addresses | \
    column -s $'\t' -t > "scan_$(date +%d-%m-%Y_%H:%M:%S)"

# 清理临时文件
rm "$SCAN_TEMP"

echo "扫描结果文件已创建在$SCRIPT_DIR目录下"

exit 0

crontab配置注意事项

  1. 给脚本添加执行权限:
    chmod +x /home/your_username/scripts/your_script.sh
    
  2. 编辑crontab定时任务:
    crontab -e
    
    添加定时规则,比如每天凌晨2点执行:
    0 2 * * * /bin/bash /home/your_username/scripts/your_script.sh
    
  3. 排查执行错误:查看crontab日志,Debian/Ubuntu系统用:
    grep CRON /var/log/syslog
    
    CentOS/RHEL系统用:
    grep CRON /var/log/messages
    

内容的提问来源于stack exchange,提问作者Darryl Akre-Tchakre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:06:21