← 返回

定时任务速查

列出所有用户的 crontab、/etc/cron.d 与 systemd timer。排查「半夜谁在跑东西」用。只读但要 root。

需要 root只读

一键执行

curl -fsSL https://www.moiu.cn/scripts/crontab-list.sh | bash

脚本源码

#!/usr/bin/env bash
# 定时任务速查
#
# 只读脚本,但需要 root —— 不然看不到别的用户的 crontab。
# 排查「半夜到底谁在跑东西」时用。
# ❗ 只列出来,不动任何一条任务。

set -e

# 需要 root:下面的系统级改动都直接执行,不再逐条 sudo
if [ "$(id -u)" -ne 0 ]; then
    echo '[!] 这个脚本需要 root 权限,请用 sudo 重新运行:'
    echo '    curl -fsSL 脚本地址 | sudo bash'
    echo '    或已经下载到本地:sudo bash 本文件'
    exit 1
fi

echo '====== 定时任务速查 ======'

echo '--- 用户 crontab ---'
if command -v crontab >/dev/null 2>&1; then
    FOUND=0
    USERS=$(cut -d: -f1 /etc/passwd | grep -v '^root$' | head -n 60)
    for u in root $USERS; do
        LIST=$(crontab -l -u "$u" 2>/dev/null | grep -v '^#' | grep . || true)
        if [ -n "$LIST" ]; then
            FOUND=1
            echo "  [$u]"
            printf '%s\n' "$LIST" | sed 's/^/    /'
        fi
    done
    if [ "$FOUND" -eq 0 ]; then
        echo '  (没有任何用户 crontab)'
    fi
else
    echo '  [!] 没有 crontab 命令'
fi

echo ''
echo '--- /etc/cron.d ---'
if [ -d /etc/cron.d ]; then
    ls -1 /etc/cron.d 2>/dev/null | sed 's/^/  /' || true
else
    echo '  (没有 /etc/cron.d)'
fi

echo ''
echo '--- systemd timer(前 15 条)---'
if command -v systemctl >/dev/null 2>&1; then
    systemctl list-timers --all --no-pager 2>/dev/null | head -n 15 || true
else
    echo '  (没有 systemctl)'
fi

下载原始文件