web-dev-qa-db-ja.com

Linux CUPS自動再追加プリンター?

CUPSを実行するRedhatマシン(2.6.9-42.ELsmp)があります。たまに、大きなファイルをプリンターに送信すると、スタックが発生するため、プリンターを再起動します。 300秒間応答しなくなると、プリンタは使用できなくなります。その後、CUPSは使用可能なプリンターリストからプリンターを削除し、再試行することはありません。

とにかく、プリンターが再びオンラインになったときにCUPSがプリンターと通信して、リストに再度追加するように設定できますか?

これを「解決」する方法は、発生するたびに、printers.confファイルを手動で変更し、プリンターのステータスを「アイドル」に変更してから、サービスを再起動することです。これを行う方が良いと確信していますね。

ありがとう、

タム。

4
user14172

これは、cupsd.confまたはprinters.confのErrorPolicyを変更することで修正する必要があります。

CUPS 1.3/Mac OS X 10.5ErrorPolicy

ErrorPolicyabort-job

ErrorPolicy再試行ジョブ

ErrorPolicystop-printer

説明

ErrorPolicyディレクティブは、バックエンドが印刷ジョブをプリンターに送信できない場合に使用されるデフォルトのポリシーを定義します。 [...]

参照: http://www.cups.org/doc-1.4/ref-cupsd-conf.html#ErrorPolicy

デフォルトは次のとおりです。

stop-printer-プリンターを停止し、将来の印刷のためにジョブを保持します

しかし、あなたはおそらく望むでしょう:

再試行ジョブ-N秒待ってからジョブを再試行します[...]

(または、retry-this-job)。

注:CUPS V1.4 +では、FatalErrorsと呼ばれます。

3
sleske

実行しているCUPSのバージョンに応じて、さまざまな方法で問題に取り組むことができます。

また、CUPSサーバーのプリントキューが実際のプリントデバイスにどの程度正確に接続されているかによって異なります:ipp://?、socket://?、lpd://?

その他の最近のバージョンのCUPSには、ここで役立つ機能が組み込まれています。これは「ErrorPolicy」と呼ばれます。デフォルト設定はcupsd.confで選択されており、cupsdが期待どおりに動作しない印刷キューを処理する方法を決定します。デフォルトとして設定するか、各キューに個別にタグを付けるか、4つの選択肢があります。

ErrorPolicy abort-job  
ErrorPolicy retry-job  
ErrorPolicy retry-this-job  
ErrorPolicy stop-printer  
中絶ジョブ
-このジョブを中止し、同じキュー内の次のジョブに進みます
再試行ジョブ
--N秒待ってからこのジョブを再試行します(Nはcupsd.confの「JobRetryInterval」ディレクティブによって決定されます)。
このジョブを再試行します
-現在のジョブをすぐに無期限に再試行します。
ストッププリンター
-現在の印刷キューを停止し、将来の印刷のためにジョブを保持します。上記の代替方法に従って別の方法で定義しない限り、これはデフォルトのままです。これはデフォルトであり、以前のバージョンのCUPS(質問に従って削除したいキュー)のすべてのキューでのみ可能な動作でした。

さらに、個別のErrorPoliciesを個別の印刷キューごとに設定できます。この設定は、printers.confファイルに記載されています。 (コマンドラインからlpadmin -p printername -o printer-error-policy=retry-this-jobを使用して設定します)。


古いバージョンのCUPSについては、beh、CUPSを確認することをお勧めします バックエンドハンドラーbehは、任意のCUPSバックエンドに適用できるラッパーです。

印刷キューが現在socket://192.168.1.111:9100のバックエンドを定義していて、それが気に入らない方法で動作すると仮定します(ネットワーク接続の問題のためにcupsdによって時々無効にされます)。 behを使用すると、バックエンドを次のように再定義します。

beh:/0/20/120/socket://192.168.1.111:9100

これにより、2分間隔でジョブが20回再試行され、それでも成功しない場合にのみキューが無効になります。または、これを行うことができます:

beh:/1/3/5/socket://192.168.1.111:9100

これにより、ジョブが3回再試行され、試行の間に5秒の遅延が発生します。それでもジョブが失敗する場合、ジョブは破棄されますが、キューは無効になりません。 cupsdにデバイスへの接続を無期限に試行させたいですか?よし、これを試してみてください:

beh:/1/0/30/socket://192.168.1.111:9100

プリンタが戻るまで、無限に試してください。接続試行の間隔は30秒です。プリンタの電源をオフにしても、ジョブは失われません。プリンタの電源を切るだけで、意図的に印刷を遅らせることができます。デスクトッププリンタやホームユーザーに適した構成。


全体として、実行中のCUPSキューを再アクティブ化するために、bashスクリプト、cronジョブ、lpadmincupsenable、またはSudoをいじる必要はありません。不規則にダウンします。

1
Kurt Pfeifle

Root(または他のcups管理者アカウント)として「enable」コマンドを使用するだけで済みます。頻繁に発生する場合は、「lpstat -a」を使用して小さなcrontabを追加し、無効になっているプリンタを見つけます。

0
wazoox