每月运行一次python脚本,将参数传递给脚本
大家好,提前感谢大家的帮助 我有一个python脚本,它是通过命令行启动的,带有如下字符串:每月运行一次python脚本,将参数传递给脚本,python,date,cron,crontab,cron-task,Python,Date,Cron,Crontab,Cron Task,大家好,提前感谢大家的帮助 我有一个python脚本,它是通过命令行启动的,带有如下字符串: python example.py [start-date] [end-date] [fixed-param] 我想让它每月自动运行一次(在ubuntu上),但每个月的[开始日期]和[结束日期]必须不同。 脚本下载了一些上个月的数据,因此如果它运行,比如说5月1日,它必须通过[开始日期]='01-04-2017'adn[结束日期]='30-04-2017' 在我的意图中,脚本将在没有我干预的情况下每月
python example.py [start-date] [end-date] [fixed-param]
我想让它每月自动运行一次(在ubuntu上),但每个月的[开始日期]和[结束日期]必须不同。
脚本下载了一些上个月的数据,因此如果它运行,比如说5月1日,它必须通过[开始日期]='01-04-2017'
adn[结束日期]='30-04-2017'
在我的意图中,脚本将在没有我干预的情况下每月运行,因此我需要将日期设置为变量或其他内容
最简单的解决方案是什么?听起来您应该使用Crontab来自动运行python脚本。有关如何开始使用Crontab的信息,请查看以下内容: 查看前两个堆栈溢出问题,了解如何在crontab中传递参数和设置日期变量的信息:
听起来您应该使用Crontab来自动运行python脚本。有关如何开始使用Crontab的信息,请查看以下内容: 查看前两个堆栈溢出问题,了解如何在crontab中传递参数和设置日期变量的信息:
我建议您在Python脚本中获取日期。下面是一个如何计算上个月的示例
import datetime
def last_month(today=None):
if today is None:
today = datetime.date.today()
lastmonthend = today.replace(day=1) - datetime.timedelta(days=1)
lastmonthstart = lastmonthend.replace(day=1)
return lastmonthstart, lastmonthend
print(last_month())
在2017年4月18日运行此功能时,我得到了:
(datetime.date(2017, 3, 1), datetime.date(2017, 3, 31))
您可以使用它来格式化:
('01-03-2017', '31-03-2017')
我建议您使用Python脚本获取日期。下面是一个如何计算上个月的示例
import datetime
def last_month(today=None):
if today is None:
today = datetime.date.today()
lastmonthend = today.replace(day=1) - datetime.timedelta(days=1)
lastmonthstart = lastmonthend.replace(day=1)
return lastmonthstart, lastmonthend
print(last_month())
在2017年4月18日运行此功能时,我得到了:
(datetime.date(2017, 3, 1), datetime.date(2017, 3, 31))
您可以使用它来格式化:
('01-03-2017', '31-03-2017')
我在crontab和Python方面的经验比我想象的要多,下面是我学到的一些经验:
env-i
-cron在特殊环境下运行。如果您不使用裸环境进行测试,您通常会发现您对非裸环境有未实现的依赖关系0 0 1 * * /usr/bin/python /path/to/my/script.py 2>&1 >> /tmp/leaked_cron_script_py.out
0 0 1 * * /path/to/my/script.bash 2>&1 >> /tmp/leaked_cron_script_bash.out
下面是一个script.bash示例,其中包括丑陋的date命令示例,尽管我强烈建议使用Tom建议的.py方法和datetime:
first_day_of_last_month=$(date -d "last month" +01-%m-%Y)
last_day_of_last_month=$(date --date=@$(( $(date -d "$(date +%Y-%m-01)" +%s) - 86400)) +%d-%m-%Y)
/path/to/my/script.py $first_day_of_last_month $last_day_of_last_month $FIXED_PARAMETER 2>&1 >> /tmp/leaked_cron_script_py.out
我会用
env-I/usr/bin/python/path/to/my/script.py
或env-I/path/to/my/script.bash
来测试这一点,我对crontab和python的经验比我想要的要多,下面是我学到的一些经验:
env-i
-cron在特殊环境下运行。如果您不使用裸环境进行测试,您通常会发现您对非裸环境有未实现的依赖关系0 0 1 * * /usr/bin/python /path/to/my/script.py 2>&1 >> /tmp/leaked_cron_script_py.out
0 0 1 * * /path/to/my/script.bash 2>&1 >> /tmp/leaked_cron_script_bash.out
下面是一个script.bash示例,其中包括丑陋的date命令示例,尽管我强烈建议使用Tom建议的.py方法和datetime:
first_day_of_last_month=$(date -d "last month" +01-%m-%Y)
last_day_of_last_month=$(date --date=@$(( $(date -d "$(date +%Y-%m-01)" +%s) - 86400)) +%d-%m-%Y)
/path/to/my/script.py $first_day_of_last_month $last_day_of_last_month $FIXED_PARAMETER 2>&1 >> /tmp/leaked_cron_script_py.out
我会用
env-I/usr/bin/python/path/to/my/script.py
或env-I/path/to/my/script.bash
来测试这一点,我认为您可以使用datetime
来“发现”上个月。你只需要得到当前日期,减去一个月。这行得通吗?我想你可以用datetime
来“发现”上个月。你只需要得到当前日期,减去一个月。这行得通吗?谢谢,我必须研究你告诉我的一些主题,但这非常有帮助谢谢,我必须研究你告诉我的一些主题,但这非常有帮助