2017-02-16 1 views
0

Я собираюсь запустить скрипт python с параметром cronjob. Параметр - пароль базы данных, который должен использоваться в скрипте.Запуск скрипта python с параметром cronjob дает ошибку:/bin/sh: пароль: команда не найдена

#!/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") 

/и т.д./кронтаб:

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'" 

который питон:

/usr/bin/python 

Ошибка в/вар/катушка/почта

/bin/sh: dbpass': command not found 

Если я запускаю сценарий вручную, она отлично работает: питон run.py «DBPass»

Любая помощь будет оценена.

+0

Ошибка говорит, что cron пытается использовать команду «dbpass» в качестве команды. Вы уверены, что это пользователь crontab, а не в системе (/ etc/crontab), который ожидает, что имя пользователя станет 6-м полем? – mata

+0

@mata Привет, спасибо за команду. Да, я положил его в crontab -e без имени пользователя. – Matrix

ответ

0

Строки вы вывесили содержит символы Юникода, это представление

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 ПРОСТРАНСТВОМ

Так пятым аргумент на самом деле *\u2002\u2002/home/test/run.py, который кажется cron рассматривает как *, взяв следующий элемент в качестве команды.

Так что просто замените эти символы EN SPACE нормальными пробелами, тогда он должен работать.

+0

Извините, комментарий '# или в байтах' неточный: он может сказать:' # или в utf-8'. Первый из них является простым utf-представлением (или эквивалентом для неспецифических символов utf-16) –

+0

@LuisColorado исправлено, спасибо за подсказку – mata

-1

Ваша запись кронтаб должна иметь пароль без кавычек:

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

привет спасибо за ответ. Мне нужно «» вокруг dbpass из-за формата MySQLdb.connect(). Тогда как я это исправим? – Matrix

+0

Вам не нужны дополнительные кавычки в 'MySQLdb.connect()' - пароль, читаемый из аргументов CLI, уже будет строкой. – zwer

+0

Кавычки из crontab не будут переданы в качестве аргумента, они удаляются оболочкой, поэтому вполне нормально их там. – mata

Смежные вопросы