저는 리눅스 민트를 사용하고 있습니다.
로그인한 표준 사용자가 액세스할 수 없도록 설계되었지만 로그인하면 계속 실행되는 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
(오류가 발생한 위치/발생 여부를 확인할 수 있도록).
여기서는 admin
user 를 사용하면 사용자 이름이 루트가 아닌 사용자라는 것을 의미한다고 가정합니다 admin
. 그렇지 않으면 기본적으로 root
사용자는 인증 없이 sudo 명령을 실행할 수 있습니다.
답변2
루트의 crontab에 추가할 수 있습니다:sudo crontab -e
지정된 일정에 따라 루트로 실행됩니다. man 5 crontab
참고자료에서 crontab 파일 형식을 참조하세요 .
편집하다
DISPLAY=:0
*/5 * * * * /path/to/your/script