JS7 JobScheduler( V.2系):
JS7®JobSchedulerでは下記のようなオブジェクトが使用できます。
ワークフロー、ジョブ、変数、ロック、ファイルオーダーソース、ジョブリソース、フォルダー、カレンダー、スケジュール
これらのオブジェクト名は、日本語を含むUnicodeで表現できる文字を使用できますが、基本Javaの識別子の命名規則に準じます。
主な制限としては
制御文字は使えません:[^\x00-\x1F\x7F\x80-\x9F]
dots '.', underscore '_' and dash '-' 以外の句読点は使えません、
dots '.', dash '-'は先頭文字に使えません。
Javaの予約語は使えません。
オブジェクト名最大長は、ルートフォルダーからのパス名を含めて255 Unicode文字
オブジェクト名はオブジェクトタイプ(ワークフロー、ジョブ、スケジュールなど)毎に一意(ユニーク)である必要があります。
詳しくは以下をご参照ください。
https://kb.sos-berlin.com/display/PKB/JS7+-+Object+Naming+Rules
V.2.3以降ではWindows版エージェントでのコードページ自動判定が追加され、インストール環境がコードページ932の場合は自動的にShift-JIS対応となり、ログやWindowsへの出力もShift-JISとなります。
JobScheduler V.1系:
現在のJobScheduler内部では、 ISO-8859-1 encoding (Latin1)で動作しておりUTF-8等のマルチバイトは正しく処理できません。
つまりジョブ定義ファイルのxml/xsd自身はUTF-8で記述できますが、JobScheduler内部では処理できないということです。
従って、変数、ログ、stdout、stderrの日本語は正しく処理できません。
KBにある記事:
Support of Unicode with UTF-8 encoding for languages such as Japanese in addition to English
は古く正確ではありませんでしたが、修正されましたのでご覧ください。
回避案:
ジョブチェーン内のジョブ間で、変数を日本語で渡したい場合、下記の方法があります。
1. 一旦変数を、テキストファイル(UTF-8)に書き出します。下記例では、予め/tmp/a.txtに書かれています。
2. ジョブ1ではテキストファイルを読み出し、base64でエンコードします
例)
# cat test1.job.xml
<?xml version="1.0" encoding="UTF-8"?>
<job title="paramtest1" order="yes">
<params >
<param name="ENCODING" value=""/>
</params>
<script language="shell">
<![CDATA[
#!/bin/bash
echo "/tmp/a.txt contains Japanese characters preliminarily"
PARAM1=`cat /tmp/a.txt`
echo "Japanese Characters a.txt"
echo $PARAM1
echo "base64 Encoding a.txt in Job"
echo $PARAM1 | base64
echo "Encode a.txt and substitute into PARAM1"
PARAM1=`echo $PARAM1 | base64`
echo "echo PARAM1"
echo $PARAM1
echo "Substitue PARAM1 into SCHEDULER_RETURN_VALUES"
echo encoding = "'$PARAM1'" >> $SCHEDULER_RETURN_VALUES
exit $?
]]>
</script>
<run_time />
</job>
2. デコードされた文字列には==等が含まれていますので、必ず"'$PARAM1'"のように''でくくります
3. 次のジョブで、$SCHEDULER_RETURN_VALUESを読み出し、''を取り除いてデコードします。
例)
# cat test2.job.xml
<?xml version="1.0" encoding="UTF-8"?>
<job title="pramtest2" order="yes">
<params >
<param name="ENCODING" value=""/>
</params>
<script language="shell">
<![CDATA[
#!/bin/bash
echo "encoding = $SCHEDULER_PARAM_ENCODING"
echo "DECODE START"
#Decode base64 string to Japanese characters.
echo $SCHEDULER_PARAM_ENCODING | sed -e s/\'//g | base64 --decode
exit $?
]]>
</script>
<run_time />
</job>
あまり美しくありませんが、お試しください。