← 返回
定时任务速查
列出所有用户的 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
