テスト目的で.forwardファイルを介してprocmailを呼び出します。
|/usr/bin/procmail
.procmailrcの規則に従って、無限ループ「start」という操作を開始します。
while true
do
date>>logfile
sleep 300
done
驚くべきことに、このタスク(またはprocmailまたは.forwardに関連する他のタスク)は、ps -ef出力に別々のプロセス(自分自身または他人のプロセスではない)として表示されないため、殺すことはできません。 5分ごとにログにタイムスタンプを記録します。シェルスクリプトを削除しても機能しません。明らかに、すでにメモリにあるので、再読み込みする必要はありません。今は、少なくともタスクを再起動すると終了すると思いましたが、そうではありませんでした。出力を停止する唯一の方法は、ログファイルを誰もが書き込めないようにすることです。しかし、そのような場合でも、ジョブは引き続き実行されます(ファイルを再読み込みできるようにするときに確認します)。
今私の質問は:root以外のユーザーとしてこのスクリプトをどのように終了するのですか?またはまったくそうでない場合:私は何を間違えましたか? ps出力に表示され(もっと重要なことに)、私が殺すためにprocmailを介してスクリプトを呼び出すにはどうすればよいですか?
マシンへのルートアクセス権はありませんが、再起動できるように物理アクセス権があります。 OSは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
}
}
これがなぜ必要なのかを尋ねる場合:外部の無料メールアカウントでメールを受信するたびに、ホストシステムの作業(Payload.shと呼びます)が(nocron
とnoなしでat
)実行されることを確認したいと思います。 6時間。だから私は外部メールアカウントのメールをホストに転送し、procmailは新しいメールが届くたびに私のスクリプト「start」を開始します。スタートでは、以前の起動スクリプトがまだ実行されていることを確認します。そうであれば、新しい2番目の "start"を終了し、そうでない場合(おそらくホストのシャットダウンのため)、 "start"は6時間ごとにPayload.shを呼び出します。この問題に対するより簡単な解決策がわかっている場合は、ここに自由に書いてください。
答え1
上記のコメントスレッドで見つかったように、Procmailはログインしているホスト以外のホストで実行されているという説明があります。通常、これは管理者がメール配信ホストを通常の本番システムから分離することを決定したときに発生します。一般的な配列は、メール配信ホストがホームディレクトリをNFSにマウントしてメッセージを読み取り可能な場所に渡しますが、そうでなければユーザーはアクセスできませんが読み取り可能な別のローカルファイルシステムに転送することです。 .)
メール処理ホストにログインする権限がある場合は、ログインして不要なプロセスを終了します。
ログインアクセス権がない場合は、.procmailrc
メール処理ホストにスクリプトを追加し、このコードを実行するための条件をトリガーする電子メールを自分に送信して、メール処理ホストで任意のコードを実行できます。
例えば、
:0
* ^Subject: secret sauce
| ps -wallx >ps.out
(もちろん、他の人があなたの実験を簡単に妨げないように、他のトリガーを使用してください。)
kill
トリガされると、終了したいプロセスのPIDを持つコマンドでタスクを変更するために必要な情報が必要です。
(完了したら、このレシピを削除する必要があります.procmailrc.
。)
厄介な管理者は、Procmailがこのようなことをするのが好きではありません。この機能を使用して「クリエイティブ」タスクを実行すると、Procmailがブロックまたは追い出される可能性があります。注意して使用してください。