微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash脚本不能在Cron中正确执行

所以,我有一个bash脚本,应该在每小时一小时的时间将ifconfig输出传递给一个文本文件。 正如很多人似乎遇到过的,这个脚本在被cron使用时不能正常工作。 不过,我所看到的大部分修正似乎并不适用于我的情况。 我明确指出所有的path,脚本具有执行权限,并在cron文件的末尾有一个换行符。

创造性地,我的脚本ip.sh包含:

ifconfig > /home/drake/DropBox/maintenance_scripts/ip.txt

cron条目是:

0 * * * * /home/drake/DropBox/maintenance_scripts/ip.sh

(我每分钟都在运行debugging)

在启动的应用程序closures之前,batch file不允许交互

运行batch fileMATLAB – DIANA TNO

即使在Windows上的背景中运行命令之后,PHP脚本仍然卡在exec上

用Lua执行powershell命令

PHP exec用IIS更改Windows密码

这里的BIG问题在运行时会运行,它会清除它可能具有的任何内容的ip.txt。 另外,我还有另外一个脚本,它和正常运行时间一样,没有任何问题,只是混淆了。 我也试过了>>,这似乎产生了相同的结果

所以,有没有人有任何想法,为什么一个脚本可能按预期发挥作用,而另一个脚本就会这样消失?

这是在我的ubuntu服务器上运行。 我正在使用DropBox同步文本文件

PHP:不能exec()wkhtmltopdf:“sh:/ usr / bin / wkhtmltopdf:权限被拒绝”

如何使用PHP exec()获得正在运行的PHP脚本列表?

Windows任务计划程序使用Powershell执行.aspx页面

Java SE 6:如何在Ubuntu Linux上通过Runtime.getRuntime()。exec()从外部打开文件

以编程方式获取path

你的脚本应该在顶部有一个“shebang”行:

#!/bin/sh

尽管这不是绝对必要的。

脚本覆盖了ip.txt因为你告诉它。 这就是重定向操作符所做的事情。 如果要追加到文件末尾,请使用>> 。 (你说你试过了,结果相同,我怀疑是这样,我怀疑cron作业没有产生任何输出,所以它没有附加任何文件。)

但是你不需要一个单独的脚本来做重定向。 您可以在cron作业本身使用>或>> :

0 * * * * ifconfig >> /home/drake/DropBox/maintenance_scripts/ip.txt

至少在我的系统中,cron作业的认$PATH是/usr/bin:/bin ,但是ifconfig是/sbin/ifconfig 。 尝试which ifconfig或type ifconfig来查看ifconfig在系统中的位置(我们都使用Ubuntu,所以它可能是相同的),并使用cron作业中的完整路径; 例如:

0 * * * * /sbin/ifconfig >> /home/drake/DropBox/maintenance_scripts/ip.txt

如果你想知道什么时候输出改变了(我想这就是你正在检查的内容),添加一个时间戳很容易:

0 * * * * ( date ; /sbin/ifconfig ) >> /home/drake/DropBox/maintenance_scripts/ip.txt

ip.sh脚本应该在每次运行的时候使用ip.txt文件; 然后由ifconfig程序重新填充。 所以,你的问题是, ifconfig没有这样做。

从cron运行东西时的常见问题是环境 。 请注意,当cron运行一个命令时,配置文件不会被使用。

在这种情况下,我认为cron下的PATH设置不包括ifconfig所在的目录(so /sbin不在PATH中)。 明显的解决方法

/sbin/ifconfig ...

export PATH=$PATH:/sbin; ifconfig ...

我认为简单地从crontab文件运行脚本通常是做生意的最佳方式。 在不更改crontab设置的情况下,您可以添加调试代码,更改环境设置,或者修改您的内容。 摆弄crontab文件中复杂的命令行在某些系统或其他系统上迟早会遇到麻烦。 所以我认为你的系统是明智的 – 我在我自己的cron -run脚本中使用了一个更复杂的系统,但是有很多共同之处。 关键是crontab条目很简单,运行的脚本就是隐藏复杂性的地方。

试试这个,它从我的cron工作。 请注意,ifconfig输出可以从Linux发行版更改为发行版,因此您可能需要调整awk选项。

# Cron ifconfig piping is broken eth0ipIC=`/sbin/ifconfig eth0` eth0ip=`echo $eth0ipIC|awk '{print $7}'|awk -F: '{print $2}'`

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐