我创建了一个python脚本,每隔1分钟就会在mysql数据库中添加一个数据条目。 为此,我在python中使用了cron.Here是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"')
答案 0 :(得分:1)
1000
相当于
* * * * * /home/praba1110/Delta_sysad_tasks/Task 2/script2.py
然而,这些crontab条目都不会起作用,因为shell会尝试执行
*/1 * * * * /home/praba1110/Delta_sysad_tasks/Task 2/script2.py
并传递参数/home/praba1110/Delta_sysad_tasks/Task
。
相反,您需要通过将命令括在引号中来保护目录路径中的空格:
2/script2.py
以便crontab条目变为
job=cron.new(command='/path/to/python "/home/praba1110/Delta_sysad_tasks/Task 2/script2.py"')
请注意,通常情况下,正确处理空间是可能的。 您可能希望避免路径中的空格,以使您的生活更轻松。
Per Moo的建议,我还添加了一条明确的绝对路径 可执行文件,因为默认情况下,cron作业看不到与登录时相同的环境变量(例如PATH)。