【问题标题】:Crontab: read argument from filecrontab:从文件中读取参数
【发布时间】:2017-05-21 16:26:07
【问题描述】:

我正在尝试执行一个 python 脚本(使用 chmod +x),它通过 cronjob 接受多个选项。一个选项是我不想存储在 crontab 文件中的密码,因此我使用 chmod 600 将其保存在用户的主目录(操作系统:raspbian)中。 我的crobtab行是:

* * * * 5 [ $(date +\%d) -le 07 ] && /opt/scripts/myscript.py -p '$(< /home/pi/mypasswordfile)'  >> /tmp/backup.log 2>&1

线

/opt/scripts/myscript.py -p '$(< /home/pi/mypasswordfile)'  >> /tmp/backup.log 2>&1

使用 bash 正确执行,但不能从 crontab 执行。这是正确的,因为 crontab 不执行 bash - 但如何正确执行?

提前致谢!

【问题讨论】:

  • 为什么不输入bash -c ".."
  • /opt/scripts/myscript.py -p `cat /home/pi/mypasswordfile` &gt;&gt; /tmp/backup.log 2&gt;&amp;1 或使用xargs
  • 为什么不把整个东西放到一个 bash 脚本文件中,然后从 cron 运行那个脚本呢?
  • 我使用了@RafaelAguilar 的建议,它就像我想要的那样工作。谢谢!
  • 我会把它写成答案! ;)

标签: python bash cron


【解决方案1】:

我通常建议不要将任何复杂的语法直接放入crontab 文件中。将其放入脚本,并从crontab 运行脚本。所以创建一个像runmyscript.sh 这样的脚本,其中包含:

#!/bin/bash
if [ $(date +%d) -le 7 ] 
then
    /opt/scripts/myscript.py -p "$(< /home/pi/mypasswordfile)"
fi

并将 crontab 更改为:

* * * * 5 /opt/scripts/runmyscript.sh >> /tmp/backup.log 2>&1

【讨论】:

  • 是的,我也采用这种方法。
【解决方案2】:

您可以捕获您的密码并使用cat 和反引号将其作为参数传递:

/opt/scripts/myscript.py -p `cat /home/pi/mypasswordfile` >> /tmp/backup.log

披露:反引号已被弃用,取而代之的是 $(),但有时不适合这种情况。

【讨论】:

  • 是什么让你无法使用$(cat /home/pi/mypasswordfile)
【解决方案3】:

简单添加

SHELL=/bin/bash

到您的crontab 文件,使用bash 而不是/bin/sh 来执行命令。

【讨论】:

    【解决方案4】:

    我会尝试:

    bash -c '/opt/scripts/myscript.py -p $(< /home/pi/mypasswordfile)'
    

    另外,有时您可能需要传递环境变量,特别是 DISPLAY 以使某些程序正确运行,例如:

    * * * * 5 env DISPLAY=:0 [ $(date +\%d) -le 07 ] && bash -c '/opt/scripts/myscript.py -p $(< /home/pi/mypasswordfile)'  >> /tmp/backup.log 2>&1
    

    【讨论】:

    • 您需要将整个参数放在单引号内。
    • 不确定我是否关注你。我删除了他的单引号,是这样吗?可以请教一下吗?
    • 将双引号改为单引号。否则$(...)/bin/sh看到,不喜欢。
    • @Barmar 感谢您的 cmets,我们非常感谢您的反馈。我知道单引号和双引号之间的区别,但我不明白为什么上面的用法会有问题。在我看来,bash -c "/opt/scripts/myscript.py -p $(&lt; /home/pi/mypasswordfile)" 上的单引号或双引号都可以正常工作,不是吗?
    猜你喜欢
    • 2021-09-26
    • 2020-08-15
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2012-04-28
    • 1970-01-01
    相关资源
    最近更新 更多