如何使python脚本在系统启动15分钟后运行?

如何使python脚本在系统启动15分钟后运行?,python,linux,Python,Linux,我用python编写了一个脚本,提醒我在chrome浏览器打开时打开WhatsApp Web。要每次运行这个脚本,我必须使用终端使python脚本运行。我想让脚本在系统启动15-20分钟后自动运行 这是我的密码: import webbrowser import os import signal import tkMessageBox from subprocess import check_output from crontab import CronTab def get_pid(nam

我用python编写了一个脚本,提醒我在chrome浏览器打开时打开WhatsApp Web。要每次运行这个脚本,我必须使用终端使python脚本运行。我想让脚本在系统启动15-20分钟后自动运行

这是我的密码:

import webbrowser
import os
import signal
import tkMessageBox
from subprocess import check_output
from crontab import CronTab


def get_pid(name):
    return int(check_output(["pidof","-s",name]))
'''Script to open whatsapp web whenever chrome is opened'''

cron=CronTab()
job=cron.new(command='/usr/bin/echo')
job.minute.during(1,50).every(1)
name="chrome"
if (get_pid(name)):
    webbrowser.open('http://web.whatsapp.com')
    tkMessageBox.showinfo(title="Greetings", message="Connect your         phone to chrome to open whatsapp!")
我试着编辑crontab,但结果证明没有多大帮助。有什么办法吗

编辑-1 这是我更新的代码,但它似乎仍然不起作用。当我手动运行脚本时,它可以工作,但在其他情况下不能(在重新启动时)

除此之外,我还在crontab中添加了以下行:

@reboot /usr/bin/python /path/to/whatsapp.py &
此外,我创建了一个.conf文件,如下所示:

start on runlevel [2345]
stop on runlevel [!2345]

exec /path/to/whatsapp.py
最新的日志文件如下所示:

SyntaxError: invalid syntax
Traceback (most recent call last):
  File "/path/to/whatsapp.py", line 17, in <module>
    while(get_pid(name)):
  File "/path/to/whatsapp.py", line 10, in get_pid
    return int(check_output(["pidof","-s",name]))
  File "/usr/lib/python2.7/subprocess.py", line 573, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['pidof', '-s', 'chrome']' returned non-zero exit status 1
Traceback (most recent call last):
  File "/path/to/whatsapp.py", line 20, in <module>
    tkMessageBox.showinfo(title="Greetings", message="Connect your phone to chrome to open whatsapp!")
  File "/usr/lib/python2.7/lib-tk/tkMessageBox.py", line 83, in showinfo
    return _show(title, message, INFO, OK, **options)
  File "/usr/lib/python2.7/lib-tk/tkMessageBox.py", line 72, in _show
    res = Message(**options).show()
  File "/usr/lib/python2.7/lib-tk/tkCommonDialog.py", line 44, in show
    w = Frame(self.master)
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2537, in __init__
    Widget.__init__(self, master, 'frame', cnf, {}, extra)
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2049, in __init__
    BaseWidget._setup(self, master, cnf)
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2024, in _setup
    _default_root = Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1767, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
SyntaxError:无效语法
回溯(最近一次呼叫最后一次):
文件“/path/to/whatsapp.py”,第17行,在
while(get_pid(name)):
文件“/path/to/whatsapp.py”,第10行,在get\u pid中
返回int(检查输出([“pidof”,“-s”,name]))
文件“/usr/lib/python2.7/subprocess.py”,第573行,在check_输出中
引发被调用的进程错误(retcode,cmd,output=output)
subprocess.CalledProcessError:命令“['pidof','-s',chrome']”返回非零退出状态1
回溯(最近一次呼叫最后一次):
文件“/path/to/whatsapp.py”,第20行,在
tkMessageBox.showinfo(title=“问候”,message=“将手机连接到chrome以打开whatsapp!”)
文件“/usr/lib/python2.7/lib tk/tkMessageBox.py”,第83行,在showinfo中
返回显示(标题、消息、信息、确定、**选项)
文件“/usr/lib/python2.7/lib-tk/tkMessageBox.py”,第72行,在
res=消息(**选项).show()
文件“/usr/lib/python2.7/lib tk/tkCommonDialog.py”,第44行,在show中
w=帧(self.master)
文件“/usr/lib/python2.7/lib-tk/Tkinter.py”,第2537行,在__
Widget.\uuuu init\uuuuuu(self、master、'frame',cnf、{}、extra)
文件“/usr/lib/python2.7/lib-tk/Tkinter.py”,第2049行,在__
BaseWidget.\u设置(自、主、cnf)
文件“/usr/lib/python2.7/lib tk/Tkinter.py”,第2024行,在_设置中
_默认值_root=Tk()
文件“/usr/lib/python2.7/lib tk/Tkinter.py”,第1767行,在__
self.tk=\u tkinter.create(屏幕名、基本名、类名、交互、wantobjects、useTk、同步、使用)
_tkinter.TclError:没有显示名称和$display环境变量

其中path/to显然是脚本的路径

简单的解决方案通常是最好的:让脚本在引导时运行,然后休眠15分钟。

我不确定通过python执行与cron相关的任务是否能帮助您解决问题。Crontab采用了一种特殊的语法来安排重新启动后的命令,因此您可能需要执行以下操作:

@reboot python /my/python/path/message.py
如果希望此代码的大部分在重新启动后15分钟内运行,可能会告诉python脚本本身在15分钟内休眠:

import time
time.sleep(900) # 900 = 60 * 15

查看错误的时间守护进程
atd
。启动时触发执行,延迟15分钟。我应该在哪里添加“@reboot…”陈述这是否意味着我不必每次运行此脚本时都键入“/message.py”?使用
crontab-e
打开crontab并添加@reboot行。将python添加到python脚本的顶部(或者在
中,如果_uname__=='_umain___'
块),这将导致脚本在重新启动15分钟后运行。打开crontab可能会让人困惑,因为我非常确定默认编辑器是VIM,您可能不熟悉它。按“i”,键入上面列出的命令,按“Esc”,然后通过键入“:q”并按enter关闭编辑器。打开的编辑器为nano。我对它很熟悉。但是,当我做出上述更改并重新启动系统时,什么也没发生。@reboot行中的路径是我的文件所在的位置。你能帮我找出哪里出了问题吗?使用python更新,你应该在大约15分钟内不会看到任何事情发生——当弹出窗口最终出现时。尝试在不使用sleep语句的情况下运行它,它应该会在一分钟左右的时间内弹出。也许可以尝试在python脚本中创建一个文件,这样您就可以检查问题是脚本没有运行,还是您的弹出窗口由于某种原因没有显示。您也可以从代码中删除所有“cron”行看起来只有chrome打开时弹出窗口才会显示,也许您想删除
if get_pid(name)):
行,使其始终运行?
import time
time.sleep(900) # 900 = 60 * 15