【问题标题】:OSX bash script does not run from cronOSX bash 脚本不能从 cron 运行
【发布时间】:2017-05-28 08:48:27
【问题描述】:

我有一个 bash 脚本,可以在命令行中正常运行。将它添加到root用户crontab(sudo crontab -e)后,我发现它没有运行。这是 cron 任务:

0,15,30,45 * * * * /Users/lorenzot/Documents/scripts/restart-net.sh

这是脚本:

#!/bin/bash

echo "Net script" | logger -s  >> /Library/Logs/netlog.log

# Ping twice just to be sure
/sbin/ping -c 2 8.8.8.8
/sbin/ping -c 2 8.8.8.8
if [ $? -ge 1 ]; then
echo "Network down :("

ifconfig en1 down
ifconfig en1 up
             exit 1
else
    echo "Network up! :)"
exit 0
fi

该脚本归根用户所有,当然,它是可执行的 (766) 并且确实存在于正确的路径中。

我没有在日志文件中看到条目,但我不确定这是否是写入日志文件的正确方法。我尝试了几种不同的变体,包括:

syslog -s -k Facility com.apple.console \
                Level Error \
                            Sender restartscript \
Message "Restart network script run"

但是没有任何东西写入任何日志。不过,我希望看到已执行的 cron 任务的日志条目。 有任何想法吗? 谢谢

【问题讨论】:

  • 检查root 的邮件帐户并查看这些作业的任何输出/错误消息是否出现在那里(您应该看到一些,或者其他错误(或者您没有告诉我们整个故事;-) ) )。 .希望错误消息会告诉您问题所在。祝你好运。
  • 将您的命令行更改为/Users/lorenzot/Documents/scripts/restart-net.sh || touch /tmp/cron_run.tmp 或类似的,以确保cron 确实启动了任务(或尝试启动)。
  • 诚实,这就是全部。我不确定我还能告诉你什么。脚本和 cron 任务已发布。
  • 我在 /tmp 中添加了触摸,但没有添加文件

标签: macos shell cron


【解决方案1】:

'logger -s` 将消息的副本发送到 stderr,而不是 stdout。此外,您可以将消息作为参数传递,而不是通过标准输入。试试这个:

logger -s "Net script" 2>> /Library/Logs/netlog.log

【讨论】:

  • 做到了!看起来它实际上正在运行,但是输出到了错误的地方。但经过进一步研究,苹果似乎正在弃用 cron 而支持 launchd。 developer.apple.com/library/content/documentation/MacOSX/…我会调查迁移到launchd。
  • @user675712 launchd 通常比 cron 更受欢迎,但仍然支持 cron,我希望它会存在很长时间。我不会担心迁移,直到/除非您看到 launchd 的明显优势。
猜你喜欢
  • 2012-10-22
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多