実行している場合、cronコマンドがセッションバスにアクセスできるようにするには何が必要ですか?
systemdに切り替えてから、最近(おそらく1〜2ヶ月前)まで、Debian Stretch(テスト)で私に効果的でした。奇妙なことに、これはPAM構成によって制御されると強く疑われていますが、/etc/pam.d
最近の唯一の変更はいくつかのペアが追加pam_selinux
されたことですpam.d/systemd-user
。
それでは何を探すべきですか?
答え1
DBUS_SESSION_BUS_ADDRESS
これは、環境変数がcron環境に伝播されないためです。
少なくともGnomeでは、バスは「検索可能」ではありません(文書の「自動起動」セクションに記載されているように)。dbus-launch(1)
マニュアルページ)ファイルを介して$HOME/.dbus/session-bus
。これにより、crontabで実行されているすべてのエントリが$DBUS_SESSION_BUS_ADDRESS
D-Busセッションを見つけて接続することができなくなります。
私は参照されている実際のファイルの使用$HOME/.dbus
や存在のために過去に動作していたという言葉を受け入れます(通常のような設定)。マニュアルページでは、次のように説明します。/tmp/dbus-$TMPNAM
$DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-GkJdpPD4sk,guid=0001e69e075e5e2
dbus-cleanup-sockets(1)
Linuxでは、D-Busはデフォルトでメモリにのみ存在し、/ tmpにそのファイルがない「抽象ソケット」を使用するため、このプログラムは本質的に役に立ちません。
ただし、Ubuntuフォーラムの投稿で提案されたアイデアのバリエーションを使用できます。SSH経由で既存のDBUSセッションに接続する、cron環境でローカルマシンの既存のユーザーセッションのセッションD-Busを検索し、それ$DBUS_SESSION_BUS_ADDRESS
に応じて設定します。
nautilus
ここで使用されている技術は、通常実行されているpulseaudio
プロセス(たとえば、および)から環境を検索し、そのtrackerd
プロセスの1つ以上をアクティブセッションで実行する必要がありますが、より基本的なアプローチをお勧めします。
すべての一般的なデスクトップ環境セッションマネージャ(gnome-session
、lxsession
および)は、以前に起動され、より低いPIDを持っていても、その環境にすでにkded4
設定されています。したがって、デスクトップ環境に対応するセッションマネージャを使用するのが最も合理的です。$DBUS_SESSION_BUS_ADDRESS
dbus-daemon
$HOME/bin/test-crontab-dbus.sh
既存のセッションバスへのアクセスをテストするために、内部に次のスクリプトを作成しました。
#!/bin/sh
SESSION_MANAGER=lxsession
OUTFILE=/tmp/${USER}-cron-dbus.txt
export $(cat /proc/$(pgrep "$SESSION_MANAGER" -u "$USER")/environ \
|egrep -z '^DBUS_SESSION_BUS_ADDRESS=')
date >> $OUTFILE
dbus-send --session --dest=org.freedesktop.DBus \
/ org.freedesktop.DBus.GetId 2>> $OUTFILE
if test "$?" -eq 0; then
echo "Success contacting session bus!" >> $OUTFILE
fi
上記は、SESSION_MANAGER=lxsession
LXDEで実行されるデフォルトのデスクトップセッション、設定したGnome、およびSESSION_MANAGER=gnome-session
使用しているKDEに適用されますSESSION_MANAGER=kded4
。
crontabのジョブがセッションバスにアクセスできる場合、出力には次のような内容が表示されます。
Fri Dec 18 15:27:02 EST 2015
Success contacting session bus!
それ以外の場合はエラーメッセージが表示されますdbus-send
。
明らかに、cronタスクを介して実際に実行する必要があるすべてのタスクを含む、セッションバス接続をテストする他の方法を置き換えることができます。