*Mailman Tips 2 [#bf7ef92e] [[Mailman on FreeBSD]]~ [[Mailman Tips]]~ [[Mailman Tips 2]]~ [[Mailman Tips 3]]~ [[Mailman Tips 4]]~ #contents **リストのメールアドレスを取り出す [#aa6b7009] Mailman の list_name というメーリングリストのメールアドレスは、 /usr/local/mailman/lists/list_name に保存されているが、Majordomo のような一行一アドレスというファイル構造にはなっていない。~ 外部アプリでユーザ認証を行う際にはそのままでは難しいので、メールアドレスをテキストで取り出したい。 /usr/local/mailman/bin/list_members list_name > /usr/local/mailman/lists/list_name/list_member とするとlist_memberという一行一アドレスのファイルが出来る。 自動生成するには、たとえば、/root/bin/mailman_mailaddress2text.sh というファイルに #!/bin/sh /usr/local/mailman/bin/list_members list_name > /usr/local/mailman/lists/list_name/list_member とし、実行権を与えて、/etc/crontab に、 55 2 * * * root /root/bin/mailman_mailaddress2text.sh と記述しておけば、毎日2時55分に自動更新する **「通し番号」の自動更新?? [#v062918a] 【2010_10_30】 guard# cat /usr/local/mailman/bin/set_post_id.py import time def set_post_id(m): today = time.strftime('%y%m%d', time.localtime()) m.post_id = float(int(today, 10) * 1000) + 1 m.Save() guard# 【Q】 通し番号を、毎日0時に[list_name:071212000]という様式にしたい(西暦の下二桁、月、日、通 し番号3桁)のですが、どのような方法がお勧めでしょうか。 【A】 bin/withlist はそれ用に作られたスクリプトを呼び出して実行することができますので、次のよ うなスクリプトを bin ディレクトリに作成しておいて、cron 実行すればよいかと思います。 $ cat bin/set_post_id.py import time def set_post_id(m): today = time.strftime('%y%m%d', time.localtime()) m.post_id = float(int(today, 10) * 1000) m.Save() cron で実行するコマンドは次のようになります。 <prefix>/bin/withlist -l -r set_post_id <listname> subject_prefix の方は、 [listname:%09d] 補足説明 % python Python 2.4.4 (#2, May 1 2007, 08:45:15) [GCC 3.4.6 [FreeBSD] 20060305] on freebsd6 Type "help", "copyright", "credits" or "license" for more information. >>> import time >>> time.localtime() (2007, 12, 13, 13, 47, 15, 3, 347, 0) >>> time.strftime('%y%m%d', time.localtime()) '071213' >>> int(time.strftime('%y%m%d', time.localtime()), 10) 71213 >>> int(time.strftime('%y%m%d', time.localtime()), 10) * 1000 71213000 >>> float(int(time.strftime('%y%m%d', time.localtime()), 10) * 1000) 71213000.0 >>> // 【結果】 // % /usr/local/bin/python2.4 -S /usr/local/mailman/bin/withlist -l -r set_post_id.py test // Importing set_post_id... // Running set_post_id.py()... // Traceback (most recent call last): // File "/usr/local/mailman/bin/withlist", line 297, in ? // main() // File "/usr/local/mailman/bin/withlist", line 269, in main // func = getattr(mod, callable) // AttributeError: 'module' object has no attribute 'py' // // これは、コマンドラインに、set_post_id.py と、「.py」が付いていたため(^^; // 正しくは、↓ 【結果】 % /usr/local/bin/python2.4 -S /usr/local/mailman/bin/withlist -l -r set_post_id test Importing set_post_id... Running set_post_id.set_post_id()... Loading list test (locked) Unlocking (but not saving) list: test Finalizing で、テストすると、 [Test:071212000] 【通し番号のテスト】 [Test:071212001] Re: 【通し番号のテスト】 [Test:071212002] Re: 【通し番号のテスト】 という具合になりました。:-) 毎日自動更新するように、 vi /usr/local/mailman/cron/crontab-sp.in 01 0 * * * /usr/local/bin/python -S /usr/local/mailman/bin/withlist -ql -r set_post_id core_sandbox #01 0 * * * /usr/local/bin/python -S /usr/local/mailman/bin/withlist -l -r set_post_id core_sandbox #01 0 * * * /usr/local/bin/python2.4 -S /usr/local/mailman/bin/withlist -l -r set_post_id test #01 0 * * * /usr/local/bin/python2.4 -S /usr/local/mailman/bin/withlist -ql -r set_post_id test と書き加えて crontab -u mailman /usr/local/mailman/cron/crontab-sp.in crontab -u mailman /usr/local/mailman/cron/crontab-sp.in (改行コードに注意:LF) して、/var/cron/tabs/mailman に変更を反映させる。 cat /var/cron/tabs/mailman # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/usr/local/mailman/cron/crontab-sp.in installed on Wed Dec 12 17:54:09 2007) # (Cron version -- $FreeBSD: src/usr.sbin/cron/crontab/crontab.c,v 1.22.2.1 2006/09/03 17:32:32 brooks Exp $) : : : : : : # At 3:27am every night, regenerate the gzip'd archive file. Only # turn this on if the internal archiver is used and # GZIP_ARCHIVE_TXT_FILES is false in mm_cfg.py 27 3 * * * /usr/local/bin/python2.4 -S /usr/local/mailman/cron/nightly_gzip 01 0 * * * /usr/local/bin/python2.4 -S /usr/local/mailman/bin/withlist -l -r set_post_id test #01 0 * * * /usr/local/bin/python2.4 -S /usr/local/mailman/bin/withlist -ql -r set_post_id test ***移行作業履歴 [#icd39083] 980 12:43 cd /usr/local/mailman 985 13:46 mv archives archives_dist 986 13:47 mv data data_dist 987 13:47 mv lists lists_dist 988 13:47 mv logs logs_dist 989 13:48 cp -rp /usr/Backups/Guard/usr/local/mailman/archives /usr/local/mailman/archives 990 13:49 ll 991 13:50 cp -rp /usr/Backups/Guard/usr/local/mailman/data /usr/local/mailman/data 992 13:50 cp -rp /usr/Backups/Guard/usr/local/mailman/lists /usr/local/mailman/lists 993 13:50 cp -rp /usr/Backups/Guard/usr/local/mailman/logs /usr/local/mailman/logs 994 13:50 ll 995 13:55 ps aux | grep mailman 996 13:55 /usr/local/etc/rc.d/mailman restart 997 13:56 /usr/local/etc/rc.d/mailman q 998 13:56 /usr/local/etc/rc.d/mailman restart 999 13:57 reboot 1000 13:57 bsd-update fetch 1001 14:28 cd /usr/local/mailman 1002 14:28 bin/withlist -l -r fix_url test tfc2.thousand-winds.jp 1003 14:29 /usr/local/etc/rc.d/mailman restart 1004 14:34 bin/withlist -l -r fix_url test tfc2.thousand-winds.jp 1005 14:52 /usr/local/mailman/bin/check_perms -f 1006 14:53 /usr/local/mailman/bin/check_perms -f 1007 14:53 bin/withlist -l -r fix_url test tfc2.thousand-winds.jp 1008 14:54 /usr/local/etc/rc.d/mailman restart 1009 14:54 /usr/local/mailman/bin/check_perms -f 1013 15:24 cp -rp /usr/Backups/Guard/root/bin/ /root/bin 1014 15:36 cp /usr/Backups/Guard/usr/local/mailman/bin/set_post_id.py /usr/local/mailman/bin/ 1015 15:43 cp /usr/Backups/Guard/usr/local/mailman/cron/crontab-sp.in /usr/local/mailman/cron/ 1016 15:46 crontab -u mailman /usr/local/mailman/cron/crontab-sp.in 1017 15:49 history ---- #counter([total|today|yesterday]);