(57)【特許請求の範囲】
【請求項１】
ホストからの転送データを受信するとスプールに格納して印刷ジョブの投入時に管理情報をスプールに格納する処理を実行するサーバにおけるスプールフル時の印刷ジョブ再投入方式であって，
前記サーバは，転送データをスプール領域に格納後に起動して印刷ジョブを投入する印刷ジョブ投入部と，前記印刷ジョブ投入部により起動して印刷ジョブの管理情報を前記スプール領域に格納してプリントの処理を行うプリントサービス部とを備え，
前記プリントサービス部に前記スプール領域への格納処理の実行結果を前記印刷ジョブ投入部に通知する手段を設け，
前記印刷ジョブ投入部に前記プリントサービス部からの実行結果を受け取り，不成功の場合に前記印刷ジョブのパラメタ情報を他の領域に格納する手段を設け，
前記他の領域を監視して印刷ジョブのパラメタ情報が格納されていると前記プリントサービス部に印刷ジョブを再投入する手段を設けたことを特徴とするスプールフル時の印刷ジョブ再投入方式。
【請求項２】
請求項１において，
前記印刷ジョブのパラメタ情報には，最初に印刷ジョブが実行された時のプロセスの識別情報と実行時刻とを含むことを特徴とするスプールフル時の印刷ジョブ再投入方式。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はスプールフル時の印刷ジョブ再投入方式に関する。
【０００２】
ＵＮＩＸ(登録商標）のようなＯＳ（Operating System) において印刷を行うサーバでプリントサービスを行う際にデータをスプール領域に格納するが，スプール領域がフル状態になるとプリントの実行に必要な情報を作成することができなくなってしまい，その解決が望まれている。
【０００３】
【従来の技術】
ＵＮＩＸのＯＳの基本機能として，印刷を行うためのジョブの管理・制御をする機能の総称してＬＰプリントサービスがある。このＬＰプリントサービスの機能の主なものに次の▲１▼〜▲３▼のような機能がある。
【０００４】
▲１▼lp：ＬＰプリントサービスにリクエストを送信する機能。
【０００５】
▲２▼lpstat：ＬＰプリントサービスの状態に関する情報を表示する機能。
【０００６】
▲３▼lpsched ：ＬＰリクエストスケジューラ（プリンタスケジューラ，ＬＰスプーラ等とも呼ばれる）。システムが常駐するプロセスで，lpによって送信されたリクエストを管理・制御する。
【０００７】
このプリントサービスを実行する場合の動作を図６により説明する。図６は従来例の構成図であり，これはスプール領域を有するＵＮＩＸサーバとプリンタ装置の構成を備えた印刷システムである。図中，５０はホスト，５１はＵＮＩＸのサーバ，５２は受信部，５３はＯＳのジョブ管理の機能であるスプール（Simultaneous peripheral operaion online)機能を実現するためのスプール領域，５４は印刷ジョブ投入部，５５はＬＰプリントサービス部，５６はプリンタ装置である。
【０００８】
ホスト５０からサーバ５１に印刷のコマンドが投入され，データが転送されると，受信部５２が起動されて転送データを受信する。受信部５２は受信した転送データをスプール領域５３に保存すると共に印刷ジョブ投入部５４を起動する。印刷ジョブ投入部５４は起動されるとＬＰプリントサービス部５５に対して印刷ジョブを投入する。なお，「印刷ジョブの投入」という用語と同じ意味の用語として「リクエストの送信」が使われる場合があるが，この説明では「印刷ジョブの投入」を使用する。ＬＰプリントサービス部５５はこれにより，ＬＰプリントサービス部５５自身が各々のジョブを管理・制御するために必要な情報を，転送データと同じスプール領域５３にファイルとして書き込む動作を行う。この印刷ジョブを管理・制御するために必要な情報（以下，印刷ジョブ管理情報という）には，ジョブを印刷するプリンタ（ジョブの出力先）や，ジョブのタイトル，ジョブの入力形式等が含まれる。このＬＰプリントサービス部５５による印刷ジョブ管理情報の書き込みが行われると，印刷ジョブが実行可能となる。
【０００９】
【発明が解決しようとする課題】
上記ＬＰプリントサービスとスプール領域を有するサーバとプリンタ装置を備えた従来の印刷システムでは，ホストからサーバに印刷コマンドを投入してデータ転送が正常に完了すると，ホストからみれば印刷ジョブが投入されたものと見なしていた。ところが，データの転送が完了した時に，スプール領域がフル（満杯）になった場合，データ転送が正常に完了しているためホストに対し何ら通知しないが，その後に印刷ジョブ投入部５４が起動して印刷ジョブの投入でＬＰプリントサービス部５５による印刷ジョブ管理情報を書き込もうとしてもスプール領域５３がフル状態のため，書き込むことができない。この場合，印刷ジョブの投入に失敗したことになるが，ホスト５０ではデータ転送が完了しているため，印刷ジョブを投入できたものと解釈しているため，その後印刷が行われないと，印刷ジョブが投入できたのに印刷されない状態（何らかのエラーの発生状態）と判断されてしまう。
【００１０】
この状態は，まだ印刷されていない印刷ジョブを順番に印刷（先行してスプール領域にデータが格納された印刷ジョブを実行）させてスプール領域５３に空き領域を作るか，印刷を取り止めるために印刷ジョブを削除するかによって解除できる。しかし，この状態を確認してから，再度サーバに対しデータを転送するという動作を実行しなければならない。
【００１１】
本発明はスプールフルのために印刷ジョブの投入に失敗しても，自律的に投入を実現することができるスプールフル時の印刷ジョブ再投入方式を提供することを目的とする。
【００１２】
【課題を解決するための手段】
図１は本発明の基本構成図である。図中，１はサーバ，２はホスト，３はプリンタ装置である。サーバ１内の１ａは転送データ受信部，１ｂはスプール領域，１ｃは印刷ジョブ投入部，１ｄはプリントサービス部，１ｅは本発明により設けたスプールフル時に印刷ジョブのパラメタ情報を格納する実行情報領域，１ｆは本発明により設けたスプールフル時印刷ジョブ投入部である。
【００１３】
本発明でホスト２からサーバ１に対してデータ転送が実行されると，転送データ受信部１ａにより受信データをスプール領域１ｂに格納し（図１のａ），印刷ジョブ投入部１ｃを起動する（図１のｂ）。印刷ジョブ投入部１ｃは，転送データ受信部１ａからの起動された条件（印刷コマンド実行のパラメタ）にしたがって，プリントサービス部１ｄに対してｌｐ（印刷コマンド）を実行させて（図１のｃ），次のプリントサービス部１ｄに対し印刷ジョブの投入を行わせる。プリントサービス部１ｄは印刷ジョブ投入部１ｃのｌｐ（印刷コマンド）の実行により印刷ジョブを投入する。プリントサービス部１ｄが印刷ジョブを投入する際の印刷ジョブの情報は，印刷ジョブの実行を管理・制御するための情報（ＬＰ情報と呼ばれる）であり，スプール領域１ｂに格納される（図１のｄ）。その管理・制御の情報は，後述するｌｐパラメタ情報とは異なる。
【００１４】
プリントサービス部１ｄによる印刷ジョブの投入によるスプール領域１ｂへのＬＰ情報の格納が，スプールフルのために失敗すると，印刷ジョブ投入部１ｃに対して返す実行結果を失敗として表示する（図１のｅ）。この実行結果を受けとると，印刷ジョブ投入部１ｃは実行情報領域１ｅに印刷ジョブの実行情報（ｌｐパラメタ情報とも呼ばれる）を格納する（図１のｆ）。一方，スプールフル時印刷ジョブ投入部１ｆは，実行情報領域１ｅを監視して（図１のｇ），そこに実行情報が格納されると，その情報に従い，印刷（ｌｐ）を最初に実行されたパラメタと全く同じパラメタで再実行する（図１のｈ）。この時の印刷（ｌｐ）の実行結果が，成功を表して（図１のｉ），印刷ジョブが正常に投入去れた場合，実行情報領域１ｅから，該当する印刷ジョブに対応する実行情報（ｌｐパラメタ情報）を削除する。また，再投入の時にスプールフルのために印刷ジョブ（ｌｐ）が失敗すると，実行情報領域１ｅの内容はそのまま保持される。こうして，スプールフル時印刷ジョブ投入部１ｆは，全ての実行情報（ｌｐパラメタ情報）が無くなるまで再投入を試みる。
【００１５】
この構成により，スプールフル時のために印刷ジョブの投入に失敗しても，データを失わず，スプール領域に空き領域ができるまで印刷ジョブの再投入を何度でも試みることができる。
【００１６】
【発明の実施の形態】
図２は本発明の実施例の構成を示す。図中，１，２，３の各符号は上記図１と同じものを表し，サーバ１内の１０〜１５は名称が一部異なるがそれぞれの機能は図１の１ａ〜１ｆに対応し，１０は転送データ受信部，１１はスプール領域，１２は印刷ジョブ投入部，１３はＬＰプリントサービス部，１４はｌｐ実行情報領域，１５はスプールフル時印刷ジョブ投入部である。また，１６はデータをプリンタに最適な形式に変換し，変換したデータをドライバを経由してプリンタ装置に送信する処理を行うフィルタ，１７はプリント出力の処理を行うドライバである。
【００１７】
転送データ受信部１０はシステム常駐型の処理部であり，ホスト２（データを転送する処理部）からのデータ転送を待ち，データが転送されると，最初にデータをスプール領域１１にスプールする。次に印刷ジョブ投入部１２が転送データ受信部１０の子プロセスとして起動され，起動された条件（後述するｌｐ実行で指定するパラメタと同じ）に従って，ＬＰプリントサービス部１３に対してｌｐを実行することにより印刷ジョブを投入する。この時に実行されるｌｐコマンドの例を以下に示す。
【００１８】
/usr/bin/lp -H hold -T SIA -t "JOBNAME / JOBNO / DISCNO" -d A -y class=A -y rmfile /var/opt/FJSVnlp/prtdata/JOBNAME/JOBDATA
このコマンドは多数のパラメタで構成され, 以下に概説する。
「/usr/bin/lp 」というパラメタはｌｐコマンドを表し，「-H hold 」は印刷ジョブをホール状態で送信，ホールド解除の指示があるまで他の印刷ジョブを先に印刷することを表す。「-T SIA」は受信データの入力形式を表し，ＬＰプリントサービス部はこの入力形式から最適なフィルタを選択する機能を持つ。「 -t "JOBNAME / JOBNO / DISCNO"」は印刷ジョブのタイトルを表し，「-d A  」は出力先のプリンタ名で，予めＬＰプリントサービス部に登録されたソフト上の仮想プリンタを示す。実際には仮想プリンタと実機プリンタデバイスとが（ＩＤ等により）１対１で対応付けられる。「-y class=A」の「-y」パラメタはユーザ定義パラメタであり，“-y xxxx ＝ yyyy ”または“-y zzzz ”のような形式でＬＰプリントサービス部１３に登録しておく。このパラメタは出力クラス（ホスト上ではライタ名）を示す。「-y rmfile 」はジョブを印刷した後にファイルを削除することを指示するためのパラメタで, 「var/opt/FJSVnlp ……JOBDATA 」はスプールフル領域に格納された受信データを表す。
【００１９】
このｌｐのコマンドの実行結果が，ＬＰプリントサービス部１３から返ってくるが，その実行結果の中のｌｐの終了値が０の場合は正常に印刷ジョブが投入されたことを表し，ｌｐの終了値が０以外の場合は，スプールフルのために印刷ジョブ投入に失敗したことを表す。スプールフルのため印刷ジョブ投入が失敗の場合は，ｌｐ実行情報領域１４にｌｐを実行した際のパラメタ情報（以下，ｌｐパラメタ情報と呼ぶ）を格納する。
【００２０】
上記のｌｐコマンドの例の場合，ｌｐ実行情報領域１４に保存されるパラメタは，「-H hold 」以下の全てのパラメタである。
【００２１】
また，ｌｐパラメタ情報は次の例に示すようなファイル名で保存される。
【００２２】
「NPＳRetryLp プロセス ID.実行時刻」
この中の「NPＳRetryLp 」は見出しで, 「プロセスID」は最初に印刷ジョブ投入部が実行された時のプロセスのプロセスＩＤであり，プロセスＩＤはＵＮＩＸシステムが各プロセスを管理するための識別子でありユニークな数値である。このプロセスＩＤがないと，同時（同じ時刻）に印刷ジョブ投入部が実行された時，片方のｌｐパラメタ情報はなくなってしまう。「実行時刻」は，最初に印刷ジョブ投入部１２が実行された時の時刻で，ＵＮＩＸシステムはシステムがリセット（サーバマシンの電源を切断して再投入した場合などを指す）前に保存しておいたｌｐパラメタ情報が（上書きされるため）なくなってしまう。
【００２３】
ＬＰプリントサービス部１３はシステム常駐型の処理部であり，ＬＰプリントサービスの１機能であるｌｐコマンドによって印刷ジョブを投入する。この投入する際の印刷ジョブの情報は，ＬＰ情報としてスプール領域１１に格納される。このＬＰ情報は，ＬＰプリントサービス部１３が印刷ジョブの管理・制御をするための情報であり，上記印刷ジョブ投入部１２で説明したｌｐパラメタ情報とは異なる内容を保存する。ＬＰ情報がスプール領域１１へ格納されて，印刷ジョブが正常に投入された場合，ＬＰプリントサービス部１３の１機能であるＬＰリクエストスケジューラがこの情報を監視し，順次印刷ジョブをフィルタ１６に印刷指示する。ＬＰプリント情報が，スプール領域１１に格納できない場合，スプールフルとしてｌｐを通じて印刷ジョブ投入失敗を印刷ジョブ投入部１２に通知する。
【００２４】
図３はスプール領域に格納されるＬＰ情報の例を示す。この中のＣ，Ｄ，Ｆ，，Ｈ，Ｐ，Ｔ…の符号はそれぞれ情報の種類を表す。
【００２５】
スプールフルのため印刷ジョブが投入できなかった場合，印刷ジョブ投入部１２によってｌｐパラメタ情報がｌｐ実行情報領域１４に格納される。同時にこのことは，ｌｐパラメタ情報が格納された時，スプールフルのために投入に失敗した印刷ジョブがあることを示す。
【００２６】
図４は印刷ジョブ投入部の処理フローである。図４には上記の実例として挙げたｌｐコマンドの例について示され，最初にｌｐを実行し（図４のＳ１），実行結果を取得する（同Ｓ２）。このｌｐ実行結果は，子プロセスとして起動された印刷ジョブ投入部１２の終了値を取得することで得られる。この実行結果が正常終了であるか判別する（図４のＳ３）。これはｌｐ実行結果の印刷ジョブ投入部の終了値が０か（正常に終了したか），否かを判定する。０（正常終了）の場合は処理を終了するが，０以外（印刷ジョブ投入失敗）の場合は，先ずプロセスＩＤを取得する（図４のＳ４）。このプロセスのプロセスＩＤは，上記したようにＵＮＩＸシステムで管理されており，そこに問い合わせることにより取得できる。次に現在時刻を取得する（同Ｓ５）。この時刻は次のファイル名作成の処理（図４のＳ６）において使用され，続いてｌｐパラメタ情報の作成の処理が行われる（同Ｓ７）。この時，上記Ｓ１で実行したパラメタから，印刷ジョブ投入部１２について説明したパラメタ情報の例のような形式の情報を作成する。更にｌｐパラメタ情報をｌｐ実行情報領域１４に保存して（同Ｓ８），終了する。
【００２７】
上記印刷ジョブ投入部の処理フローにおいてスプールフルによる印刷ジョブ投入失敗時にｌｐ実行情報領域にｌｐパラメタ情報が保存されるとスプールフル時印刷ジョブ投入部による監視及び再投入の処理が行われる。
【００２８】
図５はスプールフル時印刷ジョブ投入部の処理フローである。最初にｌｐ実行情報領域に保存されたｌｐパラメタ情報があるか判別し（図５のＳ１），情報が無いと後述するＳ７の処理に移行し，一つでも有る場合はｌｐパラメタ情報のうち，実行時刻の最も早いものを選ぶ（同Ｓ２）。選んだｌｐパラメタ情報を取得して，印刷ジョブ投入部が実行した時と同じパラメタでｌｐコマンドを再度実行し（図５のＳ３），ｌｐ実行結果を取得する（同Ｓ４）。この実行結果は上記図４のＳ２と同様にして得られる。その実行結果からｌｐは正常に終了したか判別し（図５のＳ５），正常に終了（印刷ジョブ投入が成功）した場合いは該当するｌｐパラメタ情報を削除する（同Ｓ６）。印刷ジョブ投入が失敗したと判別された場合及びステップＳ６の後，スリープ処理を行う（図５のＳ７）。このスリープ処理は，スプールフル時印刷ジョブ投入部が常駐型のプロセスで，常に無限ループするプログラムであるため，必要に応じて処理を入れるか，いれないか判断して設定すればよい。頻繁にｌｐの再実行を試した方が良い場合は，このスリープ処理を入れない方がよいが，スプールフルという状態は，他のジョブが印刷されるか，削除されるかしない限り解除されないので，それほど頻繁に行う必要がない。また，サーバのＣＰＵの負荷を軽減させることを重視する場合は，このスリープ処理は入れた方が良い。
【００２９】
次に終了要求が発生しているか判別する（図５のＳ８）。終了要求は，ＵＮＩＸシステムの場合は通常はシグナル受信（割り込み処理）であり，システムまたは別のプログラムは正常に終了させるために，スプールフル時印刷ジョブ投入部は，このシグナルに対して割り込み処理（プログラムに従った処理を一時的に中断して，決められた処理を実行する処理）を行う。終了要求が発生している（シグナルを受信している）場合は正常に終了し，終了要求が発生していない（シグナルを受信していない）場合は，Ｓ１に戻って処理を繰り返す。
【００３０】
（付記１）  ホストからの転送データを受信するとスプールに格納して印刷ジョブの投入時に管理情報をスプールに格納する処理を実行するサーバにおけるスプールフル時の印刷ジョブ再投入方式であって，前記サーバは，転送データをスプール領域に格納後に起動して印刷ジョブを投入する印刷ジョブ投入部と，前記印刷ジョブ投入部により起動して印刷ジョブの管理情報を前記スプール領域に格納してプリントの処理を行うプリントサービス部とを備え，前記プリントサービス部に前記スプール領域への格納処理の実行結果を前記印刷ジョブ投入部に通知する手段を設け，前記印刷ジョブ投入部に前記プリントサービス部からの実行結果を受け取り，不成功の場合に前記印刷ジョブのパラメタ情報を他の領域に格納する手段を設け，前記他の領域を監視して印刷ジョブのパラメタ情報が格納されていると前記プリントサービス部に印刷ジョブを再投入する手段を設けたことを特徴とするスプールフル時の印刷ジョブ再投入方式。
【００３１】
（付記２）  付記１において，前記印刷ジョブのパラメタ情報には，最初に印刷ジョブが実行された時のプロセスの識別情報と実行時刻とを含むことを特徴とするスプールフル時の印刷ジョブ再投入方式。
【００３２】
（付記３）  付記２において，前記印刷ジョブを再投入する手段は，前記他の領域に複数のパラメタ情報が格納されていると，対応する元の印刷ジョブの実行時刻の順に印刷ジョブを再投入することを特徴とするスプールフル時の印刷ジョブ再投入方式。
【００３３】
（付記４）  付記１において，前記プリントサービス部は前記スプール領域への格納処理の実行結果として，成功の場合は“０”を設定し，失敗の場合は“０”以外の数値を設定して前記印刷ジョブ投入部に提供することを特徴とするスプールフル時の印刷ジョブ再投入方式。
【００３４】
【発明の効果】
本発明によれば，スプールフルにより一旦は印刷ジョブが投入できない状態になっても新たな機構を設けることによりスプール領域に空きができるまで印刷ジョブの再投入を自動的に行うことができる。これにより，効率的な印刷の管理が可能となる。
【図面の簡単な説明】
【図１】本発明の原理構成を示す図である。
【図２】実施例の構成を示す図である。
【図３】スプール領域に格納されるＬＰ情報の例を示す図である。
【図４】印刷ジョブ投入部の処理フローを示す図である。
【図５】スプールフル時の印刷ジョブ投入部の処理フローを示す図である。
【図６】従来例の構成図である。
【符号の説明】
１      サーバ
１ａ    転送データ受信部
１ｂ    スプール領域
１ｃ    印刷ジョブ投入部
１ｄ    プリントサービス部
１ｅ    実行情報領域
１ｆ    スプールフル時印刷ジョブ投入部
２      ホスト
３      プリンタ装置
【図１】
0003900981.tif 000002
【図２】
0003900981.tif 000003
【図３】
0003900981.tif 000004
【図４】
0003900981.tif 000005
【図５】
0003900981.tif 000006
【図６】
0003900981.tif 000007