出于测试目的,我通过 .forward 文件调用 procmail
|/usr/bin/procmail
根据 .procmailrc 中的规则,它启动了一个名为“start”的作业,这只是一个无限循环
while true
do
date>>logfile
sleep 300
done
令我惊讶的是,这项工作(或与 procmail 或 .forward 相关的任何其他内容)不会在 ps -ef 的输出中显示为单独的进程(不是我自己的进程,也不是其他任何人的进程),所以我无法杀死它它每 5 分钟向日志中写入一个时间戳。即使删除shell脚本也不起作用,显然它已经在内存中了,不需要再次读取。现在我想,至少作业会在重新启动后终止,但事实并非如此。为了停止输出,我唯一能做的就是使日志文件对所有人都不可写,但即使如此,作业仍会继续运行(当我再次使文件可读时,我会看到它)。
现在我的问题是:如何以非root用户身份杀死这个脚本?或者如果根本没有:我做错了什么?我如何通过 procmail 调用脚本才能显示在 ps 输出中并且(更重要的是)使其可以被我杀死?
我没有机器的 root 访问权限,但我有物理访问权限,所以我可以重新启动它。操作系统似乎是 x86_64-suse-linux,uname -a 显示 Linux 3.11.10-7-default #1 SMP。我的外壳是bash。
@Anthon:mailq 显示一个空的邮件队列。重命名 start、.procmailrc 和 .forward 不会改变任何内容。
@EightBitTony:
nameofpc:~ > ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Apr24 ? 00:00:13 /sbin/init showopts
root 2 0 0 Apr24 ? 00:00:00 [kthreadd]
root 3 2 0 Apr24 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 Apr24 ? 00:00:00 [kworker/0:0H]
root 7 2 0 Apr24 ? 00:00:00 [migration/0]
root 8 2 0 Apr24 ? 00:00:00 [rcu_bh]
root 9 2 0 Apr24 ? 00:00:00 [rcuob/0]
root 10 2 0 Apr24 ? 00:00:00 [rcuob/1]
root 11 2 0 Apr24 ? 00:00:00 [rcuob/2]
root 12 2 0 Apr24 ? 00:00:00 [rcuob/3]
root 13 2 0 Apr24 ? 00:00:11 [rcu_sched]
root 14 2 0 Apr24 ? 00:00:07 [rcuos/0]
root 15 2 0 Apr24 ? 00:00:04 [rcuos/1]
root 16 2 0 Apr24 ? 00:00:04 [rcuos/2]
root 17 2 0 Apr24 ? 00:00:03 [rcuos/3]
root 18 2 0 Apr24 ? 00:00:01 [watchdog/0]
root 19 2 0 Apr24 ? 00:00:01 [watchdog/1]
root 20 2 0 Apr24 ? 00:00:00 [migration/1]
root 21 2 0 Apr24 ? 00:00:00 [ksoftirqd/1]
root 23 2 0 Apr24 ? 00:00:00 [kworker/1:0H]
root 24 2 0 Apr24 ? 00:00:01 [watchdog/2]
root 25 2 0 Apr24 ? 00:00:00 [migration/2]
root 26 2 0 Apr24 ? 00:00:00 [ksoftirqd/2]
root 28 2 0 Apr24 ? 00:00:00 [kworker/2:0H]
root 29 2 0 Apr24 ? 00:00:01 [watchdog/3]
root 30 2 0 Apr24 ? 00:00:00 [migration/3]
root 31 2 0 Apr24 ? 00:00:00 [ksoftirqd/3]
root 33 2 0 Apr24 ? 00:00:00 [kworker/3:0H]
root 34 2 0 Apr24 ? 00:00:00 [khelper]
root 35 2 0 Apr24 ? 00:00:00 [kdevtmpfs]
root 36 2 0 Apr24 ? 00:00:00 [netns]
root 37 2 0 Apr24 ? 00:00:00 [writeback]
root 38 2 0 Apr24 ? 00:00:00 [kintegrityd]
root 39 2 0 Apr24 ? 00:00:00 [bioset]
root 40 2 0 Apr24 ? 00:00:00 [kblockd]
root 41 2 0 Apr24 ? 00:00:00 [ata_sff]
root 42 2 0 Apr24 ? 00:00:00 [md]
root 44 2 0 Apr24 ? 00:00:00 [khungtaskd]
root 45 2 0 Apr24 ? 00:00:00 [kswapd0]
root 46 2 0 Apr24 ? 00:00:00 [ksmd]
root 47 2 0 Apr24 ? 00:00:01 [khugepaged]
root 48 2 0 Apr24 ? 00:00:00 [fsnotify_mark]
root 49 2 0 Apr24 ? 00:00:00 [crypto]
root 54 2 0 Apr24 ? 00:00:00 [kthrotld]
root 55 2 0 Apr24 ? 00:00:00 [scsi_eh_0]
root 56 2 0 Apr24 ? 00:00:00 [scsi_eh_1]
root 57 2 0 Apr24 ? 00:00:00 [scsi_eh_2]
root 58 2 0 Apr24 ? 00:00:00 [scsi_eh_3]
root 59 2 0 Apr24 ? 00:00:00 [scsi_eh_4]
root 60 2 0 Apr24 ? 00:00:00 [scsi_eh_5]
root 68 2 0 Apr24 ? 00:00:00 [kpsmoused]
root 72 2 0 Apr24 ? 00:00:01 [kworker/0:1H]
root 73 2 0 Apr24 ? 00:00:00 [deferwq]
root 114 2 0 Apr24 ? 00:00:00 [kmpath_rdacd]
root 141 2 0 Apr24 ? 00:00:00 [khubd]
root 151 2 0 Apr24 ? 00:00:00 [kworker/1:1H]
root 152 2 0 Apr24 ? 00:00:00 [kworker/2:1H]
root 154 2 0 Apr24 ? 00:00:00 [kworker/3:1H]
root 220 2 0 Apr24 ? 00:00:00 [jbd2/sda5-8]
root 221 2 0 Apr24 ? 00:00:00 [ext4-rsv-conver]
root 222 2 0 Apr24 ? 00:00:00 [ext4-unrsv-conv]
root 260 1 0 Apr24 ? 00:00:11 /usr/lib/systemd/systemd-journald
root 261 2 0 Apr24 ? 00:00:00 [kauditd]
root 296 1 0 Apr24 ? 00:00:00 /usr/lib/systemd/systemd-udevd
root 381 2 0 Apr24 ? 00:00:00 [irq/46-mei_me]
root 382 2 0 Apr24 ? 00:00:00 [hd-audio0]
root 387 2 0 Apr24 ? 00:00:00 [kvm-irqfd-clean]
root 426 2 0 Apr24 ? 00:00:00 [jbd2/sda7-8]
root 427 2 0 Apr24 ? 00:00:00 [ext4-rsv-conver]
root 428 2 0 Apr24 ? 00:00:00 [ext4-unrsv-conv]
root 430 2 0 Apr24 ? 00:00:00 [jbd2/sda9-8]
root 431 2 0 Apr24 ? 00:00:00 [ext4-rsv-conver]
root 432 2 0 Apr24 ? 00:00:00 [ext4-unrsv-conv]
root 438 2 0 Apr24 ? 00:00:01 [jbd2/sda6-8]
root 439 2 0 Apr24 ? 00:00:00 [ext4-rsv-conver]
root 440 2 0 Apr24 ? 00:00:00 [ext4-unrsv-conv]
avahi 624 1 0 Apr24 ? 00:01:38 avahi-daemon: running [fphct03.local]
root 625 1 0 Apr24 ? 00:00:00 /sbin/rpcbind -w -f
nscd 628 1 0 Apr24 ? 00:00:07 /usr/sbin/nscd --foreground
message+ 631 1 0 Apr24 ? 00:00:10 /bin/dbus-daemon --system --address=systemd: --
root 642 1 0 Apr24 ? 00:00:04 /usr/lib/systemd/systemd-logind
root 644 1 0 Apr24 ? 00:00:07 /usr/local/natinst/nisvcloc/bin/nisvcloc -D
root 647 1 0 Apr24 ? 00:00:03 /usr/sbin/rsyslogd -n
root 1233 1 0 Apr24 ? 00:00:00 /usr/sbin/sshd -D
root 1241 1 0 Apr24 ? 00:00:01 /usr/sbin/ypbind -n -no-dbus
root 1246 2 0 Apr24 ? 00:00:00 [rpciod]
root 1247 2 0 Apr24 ? 00:00:00 [nfsiod]
root 1255 1 0 Apr24 ? 00:00:00 /usr/sbin/rpc.gssd -D -p /var/lib/nfs/rpc_pipef
root 1261 1 0 Apr24 ? 00:00:00 /usr/sbin/rpc.idmapd -p /var/lib/nfs/rpc_pipefs
root 1264 2 0 Apr25 ? 00:00:00 [kworker/u8:2]
root 1276 2 0 Apr24 ? 00:00:00 [nfsv4.0-svc]
root 1298 1 0 Apr24 tty1 00:00:00 /sbin/agetty --noclear tty1 linux
ntp 1319 1 0 Apr24 ? 00:00:11 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u n
root 1351 1 0 Apr24 ? 00:00:00 /usr/bin/kdm
root 1395 1 0 Apr24 ? 00:00:29 /usr/bin/python /usr/sbin/denyhosts --daemon --
root 1437 1 0 Apr24 ? 00:00:00 /usr/lib/postfix/master
root 1450 1 0 Apr24 ? 00:00:00 /usr/sbin/cron -n
postfix 1460 1437 0 Apr24 ? 00:00:00 qmgr -l -t fifo -u
root 1633 1 0 Apr24 ? 00:00:02 /usr/lib/upower/upowerd
polkitd 1638 1 0 Apr24 ? 00:00:09 /usr/lib/polkit-1/polkitd --no-debug
root 1678 1 0 Apr24 ? 00:00:41 /usr/lib/udisks2/udisksd --no-debug
rtkit 1748 1 0 Apr24 ? 00:00:02 /usr/lib/rtkit/rtkit-daemon
root 1777 1 0 Apr24 ? 00:00:00 /usr/lib/bluetooth/bluetoothd
root 1789 1 0 Apr24 ? 00:00:00 /usr/lib/systemd/systemd-hostnamed
root 1979 1351 0 Apr25 tty7 00:00:48 /usr/bin/Xorg -br :0 vt7 -nolisten tcp -auth /v
root 1987 1351 0 Apr25 ? 00:00:00 -:0
kdm 1988 1987 0 Apr25 ? 00:02:09 /usr/lib64/kde4/libexec/kdm_greet
root 17533 2 0 Apr26 ? 00:00:00 [kworker/u8:1]
root 21461 2 0 08:20 ? 00:00:00 [kworker/2:1]
root 22873 2 0 12:10 ? 00:00:00 [kworker/1:1]
postfix 23129 1437 0 12:47 ? 00:00:00 pickup -l -t fifo -u
root 23171 2 0 12:50 ? 00:00:00 [kworker/2:2]
root 23266 2 0 13:05 ? 00:00:00 [kworker/3:1]
root 23300 2 0 13:11 ? 00:00:00 [kworker/0:2]
root 23393 2 0 13:20 ? 00:00:00 [kworker/3:2]
root 23407 2 0 13:22 ? 00:00:00 [kworker/0:0]
root 23428 2 0 13:26 ? 00:00:00 [kworker/1:0]
root 23481 1233 0 13:34 ? 00:00:00 sshd: myuserid [priv]
myuserid 23484 1 0 13:34 ? 00:00:00 /usr/lib/systemd/systemd --user
myuserid 23485 23484 0 13:34 ? 00:00:00 (sd-pam)
myuserid 23486 23481 0 13:34 ? 00:00:00 sshd: myuserid@pts/2
myuserid 23487 23486 0 13:34 pts/2 00:00:00 -bash
root 23547 2 0 13:35 ? 00:00:00 [kworker/2:0]
root 23561 2 0 13:35 ? 00:00:00 [kworker/0:1]
myuserid 23595 23487 0 13:37 pts/2 00:00:00 ps -ef
nameofpc:~ >
@tripleee:.procmailrc(是的,我知道里面有一些垃圾)就像
# .procmailrc
# routes incoming mail to appropriate mailboxes
PATH=/usr/local/bin:/usr/bin:/bin
MAILDIR=$HOME/.mailspool # all mailboxes are in .mailspool/
#DEFAULT=$HOME/.mailspool/mbox
DEFAULT=/var/spool/mail/myuserid
LOGFILE=/dev/null
SHELL=/bin/bash
{
:0
* ^From myemail@myexternalfreemailprovider\.com
{
:0
| /home/myuserid/start >/dev/null
}
}
如果您问我为什么需要这个:我想确保每次在我的外部免费邮件帐户收到邮件时,主机(没有 nocron
和 no at
)上的作业(我们称之为 Payload.sh)每 6 运行一次小时。因此,我将邮件从外部邮件帐户转发到主机,每次新邮件到达时 procmail 都会启动我的脚本“start”。在“开始”中,我将检查较早的“开始”脚本是否仍在运行。如果是,则退出新的第二个“start”,如果不是(可能是由于主机关闭),则“start”将每 6 小时调用 Payload.sh 一次。如果您知道解决此问题的更简单的解决方案,请随意将其写在这里。
答案1
正如上面的评论线程中发现的那样,解释是 Procmail 运行在与您登录的主机不同的主机上。通常,当管理员决定将邮件传递主机与常规生产计算机等分开时,就会发生这种情况。一种常见的安排是邮件传递主机安装了您的主目录 NFS,以便它可以将消息传递到您可以阅读的地方,但否则是用户无权访问的单独的本地文件系统(但请继续阅读...)
如果您有权登录邮件处理主机,只需登录并终止不需要的进程即可。
如果您没有登录访问权限,则可以通过向邮件处理主机添加脚本并向自己.procmailrc
发送一封电子邮件来触发运行此代码的条件,从而在邮件处理主机上运行任意代码段。
例如,
:0
* ^Subject: secret sauce
| ps -wallx >ps.out
(显然,使用不同的触发器,这样其他人就不会轻易干扰你的实验。)
一旦触发,您应该拥有将操作更改为带有kill
要终止进程的 PID 的命令所需的信息。
(完成后,您将需要从您的 中清除此食谱.procmailrc.
)
偏执的管理员不喜欢 Procmail 可以做到这一点。使用此功能做“创造性”的事情可能会导致 Procmail 被禁止,或者您被赶出。小心使用。