• ベストアンサー

cron(javaプログラム)からroot宛のmailで日本語文字化けの件で

cronでjavaを起動する場合、javaの中でSystem.out.println("あああ"); としたログがroot宛のmail(/var/spool/mail/root)で文字化け(日本語部分が???) となってしまいます。 30 5 * * * root java -cp /home/abc/java/ test1 | nkf --jis を試しましたが 上手くいきません。 画面表示はUTF-8からEUCへ変更しましたが、sendmailもeucとかに設定が必要なので しょか?教えて頂けれると助かります。 Redhat Linux EP4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> 問題なく「あああ」 と表示されますが、cronの中で > 起動したjavaのログ内容の日本語部分のみ文字化け > (???)となります。 なるほど、分かりました。 まず cron から実行されるプログラムに環境変数 LANG(=ja_JP.eucJP)を渡す必要があるのであれば、それを明示しなくてはなりません。単に java コマンドを実行するのではなく   LANG=ja_JP.eucJP java -cp .... のようにするか、以下のような shell script を適当な名前で作成・保存してそれを実行しましょう。 ----- ここから ----- #!/bin/sh export LANG=ja_JP.eucJP java -cp /home/abc/java/ test1 ----- ここまで ----- ※ 実行権限をつける(chmod 755 ...)のをお忘れなく。 これで多分、環境変数 LANG に ja_JP.eucJP がセットされた状態で java が起動できることでしょう。 次にメールでの文字化け、というところですがメールをどういう風に読みたいのでしょうか? > vi /var/spool/mail/root と書かれていますが、普通、メールをエディタ(vi)では読まないですよ。きちんとするなら  1. POP3 サーバを立ち上げてメールソフトで読む  2. root 宛のメールを別のアカウント(外部の自分のアドレスなどが良いでしょう)に転送し、メールソフトで読む のいずれかです。ただ、今までと同じ方法でよいのであれば、上記の LANG 設定で euc 出力にはなっていますので nkf を使わなければ大丈夫でしょう。

zerokara
質問者

お礼

回答ありがとうございます。 解決できました。有難うございました。 >> vi /var/spool/mail/root >と書かれていますが、普通、メールをエディタ(vi)では読>まないですよ。きちんとするなら このメール内容を出勤時にプリンターへ出力するために こういう表記をしました。 色々参考になり有難うございました。

その他の回答 (1)

回答No.1

コマンドラインから  $ java -cp /home/abc/java/ test1 | nkf --jis した場合は文字化けしないのでしょうか? sendmail 側での設定は特に必要ないと思いますよ。

zerokara
質問者

お礼

回答ありがとうございます。 >sendmail 側での設定は特に必要ないと思いますよ 参考になりました。 Red Hat Enterprise Linux 4では,OSの日本語ロケール(文字コード)が EUC から UTF-8 に変更 され、今までEUCで作ったソースや実行結果などの 日本語部分が文字化するためLANG="ja_JP.eucJP"として使用しております。 そのためnkfを使用せずに $ java -cp /home/abc/java/ test1とするだけで 問題なく「あああ」 と表示されますが、cronの中で起動したjavaのログ内容の 日本語部分のみ文字化け(???)となります。 vi /var/spool/mail/root 何かわかりましたら教えてください。

関連するQ&A

  • cronでメールを送信すると文字化けが起こります。

    一昨日にcronというものを知って、いろいろと弄り始めた初心者です。 cronで毎時1分にメールを送信させようと思いました。 cron1.sh というシェルスクリプト(?)で sendmail.php を実行させようとしています。 ---- cron1.sh ---- (保存形式は[UTF-8] 改行コードは[LF]) #!/bin/sh #PHP export LANG=ja_JP.jis /usr/local/bin/php /virtual/example/public_html/example.com/mail/sendmail.php exit ----------------- ---- sendmail.php ---- (保存形式は[UTF-8] 改行コードは[CR+LF]) <? $strMailFrom = "example@example.com"; // $header = "Content-Type: text/plain;charset=iso-2022-jp\r\n"; $header = "From: ".$strMailFrom; mb_language("Japanese"); $address = 'example2@example.com'; $subject = '件名です'; $message = "本文です"; if(mb_send_mail($address, $subject, $message, $header)){ print("メール送信完了"); }else{ print("送信に失敗"); } ?> --------------------- ちなみに起動させることまでは上手く行ったのですが、cronを経由して送信させたメールは文字化けが起こってしまいます。 また、実行結果メールも文字化けになっています。 (メーラーは Outlook です。) ちなみに、sendmail.php から直接のメール送信では文字化けは起こりませんでした。 いくつか自力で調べてみたところ、環境変数に問題があるのかと思ったので、export LANG=ja_JP.jis の部分を、LANG=ja_JP.eucJP、LANG=ja_JP.sjis に変えてみたりしたのですが結果は変わらず。 ファイルの保存形式自体がダメなのか、もしくは何か根本的な部分がダメなのかわかりません。レンタルサーバーのため一時間に一度しかcronで起動させることができないので、なかなか問題解決に至りません。 よろしければ良いアドバイスをください。お願します。 PHPも先月学んだばかりで、最近になってはじめて文字コードや文字化けというものを意識するようになったばかりの初心者です。何か不足している情報などありましたら、補足させていただきます。

    • 締切済み
    • PHP
  • メールのバックアップ方法

    RedHatLinux9でmail&webサーバーを構築してます。 毎日、午前3時に /var/spool/mailと/var/www/htmlをテープにバックアップしてるんですが どうやらその時にメールの送受信をしているとバックアップに失敗しているようでした。 今までは backup.shというのを作りcronに登録してます。 記述内容は tar cvf /dev/st0 /var/spool/mail /var/www/html です。 で、失敗したのでそれならと、まず/var/spool/mailを/root/backupにコピーしてからバックアップしようと mkdir backup cp -f /var/spool/mail /root/backup tar cvf /dev/st0 /var/spool/mail /var/www/html /root/backup としました。 でもこれでもうまくいかなかったようです。 エラーログは以下のようになっています。 mkdir: cannot create directory `/root/backup': File exists cp: omitting directory `/var/spool/mail' tar: /dev/st0: Cannot open: No such device tar: Error is not recoverable: exiting now 一度失敗してから テープの調子も悪くなってきているようです。

  • メールの内容が文字化けします・・・

    <? function sendmail($to,$from,$from_name,$title,$message){ /* EUCコードへのエンコーディング */ $to = mb_convert_encoding($to , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $from = mb_convert_encoding($from , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $title = mb_convert_encoding($title , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $message = mb_convert_encoding($message , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); /* 改行コード変換(CR+LFへ変換) */ $to = ereg_replace("\r", "", $to); $to = ereg_replace("\n", "\r\n", $to); $from = ereg_replace("\r", "", $from); $from = ereg_replace("\n", "\r\n", $from); $from_name = ereg_replace("\r", "", $from_name); $from_name = ereg_replace("\n", "\r\n", $from_name); $title = ereg_replace("\r", "", $title); $title = ereg_replace("\n", "\r\n", $title); $message = ereg_replace("\r", "", $message); $message = ereg_replace("\n", "\r\n", $message); /* メールヘッダ生成 */ $header = "From: ".$from_name." <".$from.">\n"; $header .= "Reply-To: ".$from_name." <".$from.">\n"; /* メール本文生成 */ $message = mb_convert_kana($message,"KV"); /* 送信メッセージ言語設定 */ mb_language("Japanese"); /* メール送信処理 */ $rcd = mb_send_mail($to,$title,$message,$header); return $rcd; } ?> 何が原因か分からないのです・・・。 教えていただければ嬉しいですm(__)m

    • ベストアンサー
    • PHP
  • mail()の文字化けについて

    HPでPHP3のmail()を使って利用者にmailを出しているのですが、 かなりの頻度で文字化けしてしまっています。 コンピュータ同士の相性の問題なのでしょうか? それともプログラムに不備(あるいはこうすれば解消する) があるのでしょうか。 是非是非とも御教授のほどお願いいたします。 OSはUNIX(Irixv6.5.1)でwebサーバはAppach、phpは4でなく3(そのためnkfでエンコードしてます)、文字コードはEUCでUPしています。 $to="(formで入力された利用者のアドレス)"; $subject="(固定)"; $body="(formで利用者が入力されたものあり)"; $header="Content-Type: Text/Plain;charset=iso-2022-jp\nFrom: office@○○○×××.com\n"; $pp=popen("echo '$subject' | /usr/local/bin/nkf -j","r"); while(!feof($pp)){ $jis_sub=$jis_sub.fgets($pp,1024); } $base64_sub=base64_encode($jis_sub); $mime_sub="=?ISO-2022-JP?B?".$base64_sub."=?="; $pp=popen("echo '$body' | /usr/local/bin/nkf -j","r"); while(!feof($pp)){ $jis_body=$jis_body.fgets($pp,1024); } mail($to,$mime_sub,$jis_body,$header);

    • ベストアンサー
    • PHP
  • cronのメール送信設定

    /var/spool/cron/crontabs/root にいくつか処理を書いて、動かしていますが そのうち一つだけ、出力を違う宛先にメールで送りたいのですが MAILTO=root の部分では全体の指定しか出来ませんか?

  • /var/spool/cron/rootって何のバ

    /var/spool/cron/rootって何のバッチ処理ですか?

  • 携帯からメールを送ると文字化け・・・

    PCからメールを送ると正常に表示されてるのに、携帯からだと内容が化けてしまうという現象になってしまいました・・・。 function sendmail($to,$from,$from_name,$title,$message){ /* JISコードへのエンコーディング */ $to = mb_convert_encoding($to, "JIS","EUCJP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $from = mb_convert_encoding($from, "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $title = mb_convert_encoding($title , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $message = mb_convert_encoding($message , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); /* 改行コード変換(CR+LFへ変換) */ $to = ereg_replace("\r", "", $to); $to = ereg_replace("\n", "\r\n", $to); $from = ereg_replace("\r", "", $from); $from = ereg_replace("\n", "\r\n", $from); $from_name = ereg_replace("\r", "", $from_name); $from_name = ereg_replace("\n", "\r\n", $from_name); $title = ereg_replace("\r", "", $title); $title = ereg_replace("\n", "\r\n", $title); $message = ereg_replace("\r", "", $message); $message = ereg_replace("\n", "\r\n", $message); /* メールヘッダ生成 */ $header = "From: ".$from_name." <".$from.">\n"; $header .= "Reply-To: ".$from_name." <".$from.">\n"; /* メール本文生成 */ $message = mb_convert_kana($message,"KV"); /* 送信メッセージ言語設定 */ mb_language("Japanese"); /* メール送信処理 */ $rcd = mb_send_mail($to,$title,$message,$header); 分かる方いらっしゃいましたら、よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • cronについて教えてください

    こんばんは。 Redhat Linuxを使用しております。 今回Cronで不要ファイルの削除を設定したいのですが、 その方法でわからない点があります。 「/etc/cron.monthly、cron.weekly、cron.daily、cron.hourly」 などの配下にシェルを置き、「/etc/crontab」ファイルの記載から これらシェルを呼び出すと思っています。 で「/var/spool/cron/user」ファイルなるものがありますが、 これの使用用途が分からず・・。 「/var/spool/cron/user」は必須の設定項目でしょうか?。 すみませんがアドバイスお願いします。

  • root宛のメールを他へメール送信したい

    RedHat Linux 7.3 を使用しています。 cron実行結果などのroot宛メールを別に立てているsendmailサーバ経由で他にメール送信しようと考えています。 sendmailサーバと同じように自分自身でsendmailをサーバとして動かし.forwardで設定すればメール送信できると思うのですが、 その為だけにsendmailをセットアップするのはちょっと面倒です。 もっと簡単にroot宛のメールを他にメール送信する方法はあるのでしょうか?

  • 文字コードの混在しているファイルの変換

    webのログを取っているのですが, URLデコード -> nkf -s としています.しかし,URLデコードしたファイルは,google等はutf-8で他はs-jis等で,文字コード(s-jis, euc, utf-8)が混在しているファイルとなってしまいます. 最終的な出力ファイルをs-jisに統一したいと思っています.nkfで行おうとしたところ,どうもうまくいきません.-Xs オプションをつけるとutf-8の部分がちゃんと表示されません.-Wsオプションをつけると今度はs-jis,eucが出力されません. なにかうまい方法はありませんか?