Shell-Script

由 procmail 啟動的作業不會出現在 ps-output 中並且無法停止,即使重新啟動後也不會

  • April 29, 2014

出於測試目的,我通過我的 .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
}
}

如果你問我為什麼需要這個:我想確保每次在我的外部 freemail 帳戶上收到郵件時,主機上的作業(我們稱之為 payload.sh )每 6 次執行一次(它有 nocron和 no )at小時。所以我將郵件從我的外部郵件帳戶轉發到主機,每次有​​新郵件到達時,procmail 都會在主機上啟動我的腳本“start”。在“開始”中,我會檢查早期的“開始”腳本是否仍在執行。如果是,則退出新的第二個“start”,如果不是(可能是由於主機關閉),那麼“start”將每 6 小時呼叫一次 payload.sh。如果您知道此問題的更簡單解決方案,請隨時在此處編寫。

正如上面的評論執行緒中所揭示的那樣,解釋是 Procmail 執行在與您登錄的主機不同的主機上。通常,當管理員決定他們希望郵件傳遞主機與正常生產機器等分開時,就會發生這種情況。一種常見的安排是郵件傳遞主機將您的主目錄掛載到 NFS 上,以便它可以將郵件傳遞到您可以閱讀的位置,但另外一個單獨的本地文件系統,使用者無權訪問(但請繼續閱讀……)

如果您對郵件處理主機具有登錄訪問權,只需登錄它並終止不需要的程序。

如果您沒有登錄權限,您可以在郵件處理主機上執行任意程式碼片段,方法是向您添加一個腳本並向您.procmailrc自己發送一封電子郵件,觸發執行此程式碼的條件。

例如,

:0
* ^Subject: secret sauce
| ps -wallx >ps.out

(顯然,使用不同的觸發器,這樣其他人就不會輕易地擾亂你的實驗。)

一旦觸發,您應該擁有將操作更改為kill具有要終止程序的 PID 的命令所需的東西。

(一旦你完成了,你會想要從你的食譜中清除這個食譜.procmailrc.

偏執的管理員不喜歡 Procmail 可以做到這一點。用這個工具做“創造性”的事情可能會導致 Procmail 被禁止,或者你被淘汰。小心使用。

引用自:https://unix.stackexchange.com/questions/126479