几年前,作为监控系统的一部分,我设置了一个 cron 作业,每分钟自动 ping 一个 URL(这过于简单,但它可以解决这个问题)。因为我是一个可怕的人,我没有在任何地方记录下来。
多年后的今天,我开始遇到被 ping 的 URL 另一端的应用程序的问题。我修复了它,但后来意识到,我不知道这个 cron 工作来自哪里。
有没有办法快速搜索或找出特定系统上的所有 crontab?我有 root 访问权限,所以权限不是问题。我只是一个用户cron
,我从来没有深入研究过它的实现,但是我的 *nix 直觉说必须有一组文本文件保存所有的 crontabs。我只是不知道他们会在哪里,如果我深入研究,我会害怕找到一些,但不是全部,或者错过系统的一些奇怪的细微差别
另外,我意识到通过 root 访问我可以
su
作为用户crontab -l
但我正在寻找一些不那么手动的东西(并希望了解有关 cron 实现的知识)
tyl*_*erl 20
crontab 可以隐藏的地方只有几个:
/etc/crontab
/etc/cron.d/*
/etc/crond.{hourly,daily,weekly,monthly}/*
/etc/crontab
,所以可能是星号/var/spool/cron/*
(有时/var/spool/cron/crontabs/*
)一定要检查at
,它保持其工作/var/spool/at/
或/var/spool/cron/at*/
另外,代替
su <user>
crontab -l
Run Code Online (Sandbox Code Playgroud)
只需这样做:
crontab -lu <user>
Run Code Online (Sandbox Code Playgroud)
Crontabs 存在于/etc/crontab
和(有许多实现)它的组件/etc/cron.*/*
(全部由 root 编辑)和/var/spool/cron/*
(用户的 crontabs)中。
如果您无法找到有问题的工作,另一种方法是在工作进行时进行调查。例如,您可以添加一个防火墙规则来记录打开连接到example.com
端口 80的进程的用户 ID :
iptables -A OUTPUT -p tcp --syn -d example.com --dport 80 -j LOG --log-prefix "[->example.com] " --log-uid
Run Code Online (Sandbox Code Playgroud)
如果作业正在使用诸如ping
or 之类的应用程序curl
,则通过记录有关正在使用它的内容的信息的包装器隐藏通常的二进制文件,并使用如下脚本/usr/local/bin
:
#!/bin/sh
{
date
echo "$0" "$@"
ps -p $PPID
echo
} >>"/tmp/$(basename "$0").log"
exec "/usr/bin/$(basename "$0")" "$@"
Run Code Online (Sandbox Code Playgroud)
快速而肮脏的方式:
grep -r ping /var/spool/cron/crontabs
Run Code Online (Sandbox Code Playgroud)
crontabs存储的确切位置可能因系统而异,但它通常在名称中/var/spool
并在crontab
某处。
另外请注意,许多系统具有系统的crontab(像/etc/crontab
,/etc/cron.d
),其中一些可以调用多个脚本像/etc/cron.hourly
,.daily
...
归档时间: |
|
查看次数: |
1873 次 |
最近记录: |