sudo를 사용하여 cron을 통해 Python 스크립트를 실행하시겠습니까?

sudo를 사용하여 cron을 통해 Python 스크립트를 실행하시겠습니까?

저는 리눅스 민트를 사용하고 있습니다.

로그인한 표준 사용자가 액세스할 수 없도록 설계되었지만 로그인하면 계속 실행되는 Python 스크립트를 작성했습니다. mysql 데이터베이스에 필드가 설정되어 있고 "로그아웃 중입니다"라는 대화 상자가 표시되면 실행하고 로그아웃합니다.

Python 스크립트를 표준 사용자로 실행하면 모든 것이 잘 작동하고 로그아웃됩니다.

관리자 권한으로 Python 스크립트를 실행하면 다음과 같은 결과가 나타납니다.

glib.GError: Unable to connect to server

대화 상자를 표시하려고 할 때

관리자 사용자를 사용하여 스크립트를 다시 실행하면 sudo작동합니다.

아이디어는 cron에서 실행하는 것인데, cron이 admin user 로 스크립트를 실행하도록 할 수 없으면 sudo작동하지 않습니다 .

도움이 필요하세요?

편집하다

다음은 스크립트의 두 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로 실행해야 하는 경우, 한 가지 해결책은 관리 사용자가 비밀번호 없이 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(오류가 발생한 위치/발생 여부를 확인할 수 있도록).

여기서는 adminuser 를 사용하면 사용자 이름이 루트가 아닌 사용자라는 것을 의미한다고 가정합니다 admin. 그렇지 않으면 기본적으로 root사용자는 인증 없이 sudo 명령을 실행할 수 있습니다.

답변2

루트의 crontab에 추가할 수 있습니다:sudo crontab -e

지정된 일정에 따라 루트로 실행됩니다. man 5 crontab참고자료에서 crontab 파일 형식을 참조하세요 .

편집하다

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

관련 정보