sudoを使用してcronを介してPythonスクリプトを実行しますか?

sudoを使用してcronを介してPythonスクリプトを実行しますか?

私はLinux Mintを使用しています。

ログインした標準ユーザーがアクセスできないように設計されていますが、ログインしても引き続き実行されるPythonスクリプトを作成しました。 mysqlデータベースにフィールドが設定されており、「ログアウト中です」というダイアログが表示されたら、実行してログアウトします。

Pythonスクリプトを標準ユーザーとして実行すると、すべてがうまく機能し、ログアウトされます。

管理者権限でPythonスクリプトを実行すると、次の結果が表示されます。

glib.GError: Unable to connect to server

ダイアログボックスを表示しようとしたとき

管理者ユーザーを使用してスクリプトを再実行するとsudo機能します。

アイデアはcronで実行することですが、cronにadmin userでスクリプトを実行させることができないとsudo機能しません。

助けが必要ですか?

編集する

以下はスクリプトの2つのGUI部分です。

このセクションはスクリプトが実行されるたびに呼び出され、ユーザーの残り時間とともに通知が表示されます。

    u.get_time_left()
    n = pynotify.Notification("Time Left", str(u.timeLeft / 60)+" Minutes remaining")

    n.set_urgency(pynotify.URGENCY_CRITICAL)
    n.set_timeout(10000) # 10 seconds
    n.set_category("device")
    helper = gtk.Button()
    icon = helper.render_icon(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_DIALOG)
    #n.set_icon_from_pixbuf(icon)
    try :
        n.show()

このセクションは、特定の条件、つまり残り時間が5分未満の場合にのみ実行されます。

def getText():
    #base this on a message dialog
    dialog = gtk.MessageDialog(
        None,
        gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
        gtk.MESSAGE_QUESTION,
        gtk.BUTTONS_OK,
        None)
    dialog.set_markup('Your time limit is nearing the <b>end</b>')
    entryUser = gtk.Entry()
    entryPass =gtk.Entry()
    entryUser.connect("activate", responseToDialog, dialog, gtk.RESPONSE_OK)
    hbox = gtk.HBox()
    hbox.pack_start(gtk.Label("Username:"), False, 5, 5)
    hbox.pack_start(entryUser)
    hbox.pack_start(gtk.Label("Password:"), False, 5, 5)
    hbox.pack_start(entryPass)
    dialog.format_secondary_markup("Please enter a new voucher <i>Username</i> and <i>password</i> to carry on your current session")
    dialog.vbox.pack_end(hbox, True, True, 0)
    dialog.show_all()
    dialog.run()
    username = entryUser.get_text()
    password = entryPass.get_text()
    dialog.destroy()
    voucher = {'username':username,'password':password}
    return voucher

答え1

標準ユーザーのcrontabにcronjobを追加するとどうなりますか?

...

管理ユーザーのcrontabに入って動作するためにsudoとして実行する必要がある場合、解決策の1つは、管理ユーザーがパスワードなしでPythonスクリプトを実行できるようにsudoersファイルを変更することです。

admin hostname = NOPASSWD: /path/to/python/script.py

admin次に、ユーザーのcrontabファイルから:

0 0 * * * sudo /path/to/python/script.py > /tmp/script.py.log 2>&1

真夜中にスクリプトを実行し、出力を記録します/tmp/script.py.log(エラーが発生した場所/発生したかどうかを確認できるように)。

ここではadmin、userを使用すると、ユーザー名がrootではなくユーザーであることを意味すると仮定しますadmin。それ以外の場合、デフォルトではrootユーザーは認証なしでsudoコマンドを実行できます。

答え2

ルートのcrontabに追加できます。sudo crontab -e

指定されたスケジュールに従ってルートとして実行されます。man 5 crontab参考資料のcrontabファイル形式を参照してください。

編集する

DISPLAY=:0
*/5 * * * * /path/to/your/script

関連情報