Linux

CRON (no tty):刪除帶有特定“Message-Id”的消息

  • January 6, 2020

我有一種情況,我需要從郵箱(例如**/var/mail/root**)中刪除具有特定Message-Id的消息。

以下程式碼僅適用於控制台,但我必須在沒有從 cron /etc/crontab 執行的使用者互動的情況下執行此操作。

文件: /tmp/clear_spam_test

mutt -f /var/mail/root -e "set alias_file=/var/mail/root" -e "set crypt_use_gpgme=no" -e "push <delete-pattern>~iSomeMessageId@messageid.test\n<sync-mailbox>qy"

我嘗試了很多變化

  1. ssh -tt localhost 'bash -s' < /tmp/clear_spam_test

輸出:

mutt -f /var/mail/root -e "set alias_file=/var/mail/root" -e "set crypt_use_gpgme=no" -e "push <delete-pattern\>~iSomeMessageId@messageid.test\n\<sync-mailbox\>qy"

迴聲 -e “\n測試” $ ( whoami ) $ 0"

退出 0

<n>~iSomeMessageId@messageid.test\n<sync-mailbox>qy"

打開終端時出錯:未知。

測試 root bash

退出

與本地主機的連接已關閉。

  1. ssh -t localhost 'bash -s' < /tmp/clear_spam_test

輸出:

不會分配偽終端,因為標準輸入不是終端。

未指定收件人。

  1. ssh -T localhost 'bash -s' < /tmp/clear_spam_test

輸出:

沒有指定收件人。

  1. ssh -tt $server <<'ENDSSH' echo $(/tmp/clear_spam_test) exit 0 ENDSSH

輸出:

錯誤打開終端:未知。

TEST root /tmp/clear_spam_test

logout

與本地主機的連接已關閉。

  1. ssh -t $server <<'ENDSSH' echo $(/tmp/clear_spam_test) exit 0 ENDSSH

輸出:

不會分配偽終端,因為標準輸入不是終端。

消息:ttyname 失敗:設備

的 ioctl 不合適 未指定收件人。

測試根 /tmp/clear_spam_test

  1. ssh -T $server <<'ENDSSH' echo $(/tmp/clear_spam_test) exit 0 ENDSSH

輸出:

消息:ttyname 失敗:設備

的 ioctl 不合適 未指定收件人。

測試根 /tmp/clear_spam_test

它都不起作用。我也試過IFS。

這裡同樣的問題。這個 mutt 命令似乎依賴於 cron 無法建構的工作終端視窗。至少對我來說,它有助於使用螢幕啟動虛擬終端:

screen -d -m  mutt -f /var/mail/root -e "set alias_file=/var/mail/root" -e "set crypt_use_gpgme=no" -e "push <delete-pattern>~iSomeMessageId@messageid.test\n<sync-mailbox>qy"

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