gnome-session-save --kill
crontabを介してコマンドを実行しようとしています。私はコマンドを使用しましたsudo crontab -e
。ファイルは次のようになります。
PATH=/usr/bin
00 00 * * * gnome-session-save --kill
コマンドが期待どおりに実行されませんでした。/var/log/syslog
しかし、正常に実行されたことを示しています。
コマンドは/usr/bin/gnome-session-save --kill
コマンド()へのフルパスも試しましたが、運がありませんでした。
Ubuntu 10.04LTS
答え1
まず、sudo crontab -e
この目的で使用しないでください。これにより、root ユーザーの crontab ファイルが編集されます。保存されたgnomeセッションがあなたに属するように、ユーザーcrontabでそれを実行する必要があります。 sudoを削除して実行しますcrontab -e
。必要に応じて、cron.allow
crontabファイルをユーザーとして所有できるように、ファイルに自分自身を追加します。 (また、ルートのcrontabを再編集してこのエントリを削除することを忘れないでください。)
次に、正しい変数に接続しないと、cronはgnomeユーティリティなどの機能を実行できません$DISPLAY
。 cronが子に渡す環境はログインシェルほど完全ではなく、グラフィカルログイン環境では実行されないため接続されません。次の点を考慮してください。複数のグラフィック環境を実行できます。システムスクリプトはどのスクリプトを操作したいのかをどうやって知ることができますか?しかし、実際にはそうではありません。どのモニターで実行されているかを特定し、それをコマンドに渡す必要があります。
結局、ここはとにかく間違った場所のようです。一体なぜ定期的にセッションを終了したいのですか?その瞬間、ユーザーが行ったすべての操作は破壊されます。また、cronはユーザーがログインしているかどうかに関係なく実行されるため、常にアクション可能なエントリがない可能性があります。
答え2
Calebは正しい表示変数を渡すことについて正しいです。また、SUDOの代わりにcrontab -eを使用します。 Ubuntuでは、Crontabから渡すディスプレイを指定するだけです。だから私のコマンドは次のようになります
00 18 * * * env DISPLAY=:0 gnome-session-save --kill
env DISPLAY=:0 は、cronjob が現在のモニター (デスクトップ) に渡されるように指示します。あるいは、複数のモニタがある場合は、小数点を使用して渡すモニタを指定できます(0.0 =ディスプレイ1、0.1 =ディスプレイ2など)。
はい、ページを正しく読み込めず、Google Web Cacheを使用しました= D。
答え3
〜のようにパベル・セリヴァノフここを指摘してください記事DBUS_SESSION_BUS_ADDRESS
cronjobを介してGUI関連タスクを設定して有効にする必要があります。DISPLAY
DBUS_SESSION_BUS_ADDRESS
彼はXFCE、Gnome、Unity、Cinnamon、KDE用のシェルスクリプトを書いています。で動作していることを確認できますubuntu:16.04
。
$ sudo nano /usr/local/bin/gui-cron
#!/bin/sh
[ "$#" -lt 1 ] && echo "Usage: $0 program options" && exit 1
program="$1"
shift
user=$(whoami)
env_reference_process=$( pgrep -u "$user" xfce4-session || pgrep -u "$user" cinnamon-session || pgrep -u "$user" gnome-session || pgrep -u "$user" gnome-shell || pgrep -u "$user" kdeinit )
export DBUS_SESSION_BUS_ADDRESS=$(cat /proc/"$env_reference_process"/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS= | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
export DISPLAY=$(cat /proc/"$env_reference_process"/environ | grep -z ^DISPLAY= | sed 's/DISPLAY=//')
"$program" "$@"
その後、crontab構文を使用して、指定されたスケジュールに従って実行されるユーザーcronjobを作成できます。たとえば、22:00から05:59の間に15分ごとに:
$ crontab -e
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
*/15 22-23,00-05 * * * gui-cron gnome-session-quit --power-off
答え4
同様のエラーを見たことがあります。コマンドをシェルスクリプトに入れ、シェルスクリプトをcronに追加すると機能します。次のようなものを作成します。killGnome.sh
#!/bin/sh
gnome-session-save --kill
上記で実行権限を付与したことを確認してください。次に、crontabに以下を追加します。
00 00 * * * /path/to/killGnome.sh
理由はわかりません。 :|編集者を歓迎します。