CUPSにプリンターがあり、ドライバーの問題(HP 1010)が原因で一時停止することがあります。
1時間に1回実行してCUPSでプリンターを再開するシェルスクリプトを作成したいと思います。しかし、シェルコマンドラインからプリンタを再開する方法を数分間グーグルで調べた後、私は全く知りません。
CUPSにプリンターがあり、ドライバーの問題(HP 1010)が原因で一時停止することがあります。
1時間に1回実行してCUPSでプリンターを再開するシェルスクリプトを作成したいと思います。しかし、シェルコマンドラインからプリンタを再開する方法を数分間グーグルで調べた後、私は全く知りません。
回答:
cupsenableコマンドがあります。
cupsenable printer
無効なプリンターを起動します(プリンター名を確認するには、lpstat -p
またはでプリンターをリストできますlpc status
)。
rootとして、またはsudoを介してコマンドを実行する必要がある場合があります。そのため、シェルスクリプトでプリンターを有効にする必要がある場合は、シェルをルートのcrontabに追加するか、sudoersファイルを編集する必要があります。
実行しているCUPSのバージョンに応じて、さまざまな方法で問題に対処できます。
CUPSのより新しいバージョン(バージョン1.2以上)には、ここで役立つ組み込み機能が付属しています。「ErrorPolicy」と呼ばれます。cupsd.confでデフォルト設定が選択されており、cupsdが期待どおりに動作しない印刷キューをどのように処理するかを決定します。各キューに個別にタグ付けする3つの選択肢があります。
ErrorPolicy abort-job
ErrorPolicy retry-job
ErrorPolicy retry-this-job
ErrorPolicy stop-printer
説明:
abort-job
-このジョブを中止し、同じキュー内の次のジョブに進みます
retry-job
-N秒待ってからこのジョブを再試行します(Nはcupsd.confの "JobRetryInterval"ディレクティブによって決定されます)。
retry-this-job
-現在のジョブを即座に無期限に再試行します。
stop-printer
-現在の印刷キューを停止し、将来の印刷のためにジョブを保持します。上記の代替案に従って別途定義しない限り、これはデフォルトのままです。また、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
これにより、試行間の5秒の遅延でジョブが3回再試行されます。それでもジョブが失敗する場合、ジョブは破棄されますが、キューは無効になりません。cupsdにデバイスへの接続を無期限に試行させたいですか?良い、これを試してください:
beh:/1/0/30/socket://192.168.1.111:9100
プリンターが戻るまで無限に試してください。接続試行の間隔は30秒です。プリンターの電源をオフにしても、ジョブは失われません。プリンタのスイッチを切るだけで、意図的に印刷を遅らせることができます。デスクトッププリンターやホームユーザーに適した構成。
全体として、bashスクリプト、cronジョブなどをいじり回す必要はありませんlpadmin
。cupsenable
またsudo
、CUPSキューが不規則にダウンするのを再度アクティブにする必要もありません。
JobRetryInterval 58
、58秒ごとに試すことができます。他の可能な値は、1w
(1週間)、3d
(3日間)、7h
(7時間)または4m
(4分)です。
cupsd.conf
パラメーターは、http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.htmlに文書化されています。ページの右端にある各パラメーターの注釈を確認してください。どのCUPSリリースが最初にそれをサポートしたかがわかります。より便利なパラメーターが発見されました!:
で-E
使用されるプリンタオプションlpadmin
はそれを行う必要があります。おそらく、lpadmin
コマンドでcronジョブを作成できます。
lpadmin [-U username ] [ -h server[:port] ] -p printer option(s)
時間ごとのcron
エントリー:
0 * * * * /usr/sbin/lpadmin -p your_printer -E
以下を実行することで追加できます:
sudo crontab -e
-E
ここでは、lpadminオプションではなく、プリンターオプションであるため、必ずプリンター名の後に追加してください。man lpadmin
以下のコメントで指摘されたページからの次の抜粋に注意してください。
-d、-p、または-xオプションの前に指定すると、-Eオプションはサーバーへの接続時に暗号化を強制します。
error-policy
何も解決しません。cupsenable
何も修正しません。lpadmin
私だけのために。
私のプリンターはHP CP1215にもエラーがあります:プリンターの一時停止-「/ usr / lib / cups / backend / hp failed」
両方cups
を再起動し、でavahi-daemon
プリンタを識別しlpstat -p
、で有効にしたcupsenable
後、再度印刷することができました。再起動cups
と有効化だけではうまくいきませんでした。
また、デフォルトポリシーをretry-jobに変更し、最終的にcronjobでエラーを回避することになりました。
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
どこpoissa käytöstä
「注文のうち、」メンテナンスのためのフィンランド語のローカライズテキストであるとHP_Tuloostin
私のプリンタの名前です。
私の経験では、default-policyと現在のプリンターポリシーの両方をretry-jobに設定する必要があります。デフォルトのポリシーは、新しいプリンターをインストールするときに取得するポリシーです。
GUIがプリンターを再開するためにログインを必要とするという事実に問題がある場合、別の解決策は、ログインなしでGUIを介してプリンターを再開できるようにすることです。これを行うには、カップをシャットダウンして次の行を編集しますsudo vi /etc/cups/cupsd.conf
。
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel- Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
Resume-Printer
ディレクティブを削除してから、cupsを再起動します。ディレクティブが複数の<Limit>
セクションに表示される場合、関連する<Policy>
セクションから削除するか、すべてから削除できます。これで、GUIからログインしなくてもプリンターを再開できるはずです。これはmacworldで見ましたが、どのカップのインストールにも当てはまります。
上記のJanneからの回答、例えばこれ:
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
...プリンタの状態に関係なく、CUPSが毎分再起動されます。これは、cups restart句が&&とペアになっていないためです。
これは、障害状態の検出時にCUPSの再起動を条件付きにするために使用した短いBASHスクリプトです。
#!/bin/bash
DATE=$(date)
DS40=$(/usr/bin/lpstat -p |grep "DS40" |grep "disabled")
if [ ! -z "${DS40}" ]; then
echo "${DATE} - Restarted avahi and cups" >> /var/log/cups/restart-cron-tim.log
/usr/sbin/service avahi-daemon restart
/usr/sbin/service cups restart
/usr/sbin/cupsenable Dai_Nippon_Printing_DS40
fi
「DS40」を状況を探しているプリンターに置き換え、「無効」を言語のlpstat -p出力に置き換えます。
次の行でcupsd.confを更新しました。
ErrorPolicy abort-job
次に、/etc/init.d/cups restartを使用してcupsdを再起動しました
しかし、printers.confファイルを見ると、ErrorPolicyは更新されていません。cupsのドキュメントによると、「ErrorPolicy abort-job」という行がプリンターセクションに表示される必要があります。
また、lpadminでErrorPolicyを更新しようとしました。ErrorPolicyは何も変更しないか、printers.confファイルに反映されません。
私は何が欠けていますか?cupsdがエラー時にジョブを実際に中止することを確認するにはどうすればよいですか?
ここでの解決策の多くは、私にとってはうまくいきませんでした(例:sudo cupsenableとlpadmin -E)。
Debian 8.6 を使用している場合、Cinnamon 2.2.16(Linux)はGUIのスタートメニューからこれを行います。
Click Administration | Print Settings,
Then select your stalled CUPS printer,
Click Unlock (and give it your admin password),
Click Server | Settings,
In this click the blue "Problems?" link.
以下のためのUbuntuの 16.04:
Click System Settings | Printers,
Then Server | Settings,
Click the blue "Problems?" link.
これにより、印刷のトラブルシューティングツールが開きます。次に何をすべきかがわかります。
おそらく、印刷設定でCUPSプリンターのEnabledプロパティを確認する必要があります。(最初にロックを解除する必要があります)。
最後に、これが再び発生しないようにするには、上記のプリンターの設定で(プロパティ|ポリシーの下で)プリンターの「ポリシー」を「再試行ジョブ」に変更します。
私のためにそれを修正しました!
この問題の原因: CUPSプリンターに印刷するときにWiFiプリンターの電源が切れ、ポリシーが「プリンターの停止」である場合、印刷できず、プリンターが無効になっているというメッセージが表示されます(有効はオフ) 。ポリシーが「ジョブの再試行」に設定されている場合のみ、「有効」はオフになりません。プリンタの電源を入れ直してから数分後に、ジョブの印刷が開始されます。
(これに関する私の他の投稿。)
ここで同じCUPSナンセンスに対処しなければなりませんでした...私にとっての解決策は、n分ごとに実行されるsystemdスクリプトでした。
#!/bin/sh
for printer in $(lpstat -v | perl -pe 's/device for ([A-Za-z0-9_]+):.*/\1/g')
do
echo "Forcely enabling printer: $printer"
# Enable:-E PrinterId:-p
/usr/bin/lpadmin -E -p "$printer"
done
[Unit]
Description = Forcely enable printer occassionally. Why CUPS disables printers in the first place has yet to be determined.
[Service]
Type = simple
ExecStart = /usr/local/cups/enable_cups_printers.sh
[Install]
WantedBy = multi-user.wants
[Unit]
Description=Run enable printers frequently to ensure connection difficulties are remedied.
[Timer]
OnBootSec=15min
OnUnitActiveSec=300
[Install]
WantedBy = timers.target