我创建了一个 python 脚本,每 1 分钟在 mysql 数据库中添加一个数据条目。 为此,我在 python 中使用了 cron。这是 script1.py 的代码:
import MySQLdb as mdb
from crontab import CronTab
con=mdb.connect('localhost','prabakar','****','timedb');
with con:
cur=con.cursor()
cur.execute("DROP TABLE IF EXISTS timer")
cur.execute("CREATE TABLE timer(Time TIME)")
cur.execute("INSERT INTO timer(Time) VALUES(CURRENT_TIMESTAMP)")
cron= CronTab(user=True)
job=cron.new(command='/home/praba1110/Delta_sysad_tasks/Task 2/script2.py')
job.minute.every(1)
cron.write()
script2.py 在哪里,
import MySQLdb as mdb
con=mdb.connect('localhost','prabakar','****','timedb');
with con:
cur=con.cursor()
cur.execute("INSERT INTO timer(Time) VALUES(CURRENT_TIMESTAMP)")
当我在终端中执行命令“crontab -e”时,它显示了一个条目
* * * * * /home/praba1110/Delta_sysad_tasks/Task 2/script2.py
而不是,
*/1 * * * * /home/praba1110/Delta_sysad_tasks/Task 2/script2.py
当我使第二个脚本单独运行时,它确实运行并在表中附加了当前时间。但是当尝试从 script1 执行时,它不起作用。脚本 2 没有从脚本 1 执行。 PS:我确实给了 script2.py rwx 权限
谁能告诉我为什么 script1.py 不起作用或者问题出在哪里?
<小时/>已解决
如果我们给予,它就会起作用
job=cron.new(command='/user/bin/python2"/home/praba1110/Delta_sy Sad_tasks/Task 2/script2.py"')
最佳答案
* * * * * /home/praba1110/Delta_sysad_tasks/Task 2/script2.py
相当于
*/1 * * * * /home/praba1110/Delta_sysad_tasks/Task 2/script2.py
但是,这些 crontab 条目都不起作用,因为 shell 将尝试执行
/home/praba1110/Delta_sysad_tasks/Task
并将参数传递给它2/script2.py
。
相反,您需要通过将命令括在引号中来保护目录路径中的空格:
job=cron.new(command='/path/to/python "/home/praba1110/Delta_sysad_tasks/Task 2/script2.py"')
这样 crontab 条目就变成了
* * * * * /path/to/python "/home/praba1110/Delta_sysad_tasks/Task 2/script2.py"
请注意,正确处理空格可能会很麻烦。 您可能希望避免路径中出现空格以使您的生活更轻松。
根据 Moo 的建议,我还添加了 python 的显式绝对路径 可执行文件,因为默认情况下 cron 作业不会看到与登录时相同的环境变量(例如 PATH)。
关于python - 为什么 Python 没有正确设置我的 cron 作业的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559889/