使用cronjob运行带有参数的python脚本会出现错误:/ bin / sh:password:command not found

时间:2017-02-16 10:12:37

标签: python linux cron

我将使用cronjob运行带有参数的python脚本。 参数是需要在脚本中使用的数据库的密码。

#!/usr/bin/python

import MySQLdb
import requests
import json
import os
import sys
param=sys.argv
password=param[1]

db = MySQLdb.connect(host="host.com",port=3306,user="user",passwd=password,db="db")

/ etc / crontab中:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# *  *  *  *  * user-name command to be executed

Crontab -e

*/5 * * * *  /home/test/run.py "dbpass'"

哪个python:

/usr/bin/python

/ var / spool / mail

中的错误
/bin/sh: dbpass': command not found

如果我手动运行脚本,它运行正常:python run.py" dbpass'"

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

您发布的字符串包含unicode字符,其表示形式为

u'*/5 * * * *\u2002\u2002/home/test/run.py "dbpass\'"'
# or encoded to utf-8:
b'*/5 * * * *\xe2\x80\x82\xe2\x80\x82/home/test/run.py "dbpass\'"'

\u2002是EN SPACE

所以第五个参数实际上是*\u2002\u2002/home/test/run.py,而cron似乎将其视为*,将下一个项目作为命令。

因此,只需将这些EN SPACE字符替换为普通空格即可。

答案 1 :(得分:-1)

您的crontab条目应该没有引号的密码:

*/5 * * * *  /home/test/run.py dbpass