linux - crontab 在重新启动时不启动命令

标签 linux python-2.7 raspberry-pi cron

我需要一个在重新启动时运行的命令。该命令称为 script.sh

#!/bin/bash
ibeacon scan | /home/pi/test.py

此命令将输入​​传送到我编写的名为 test.py 的 Python 程序。

#!/usr/bin/python
import fileinput
import socket
import requests

for line in fileinput.input():
   if line.startswith('UUID:'):
      line = line.strip()
      a = line.split(' ')[1]
      b = line.split(' ')[3]
      c = line.split(' ')[5]
      d = line.split(' ')[7]
      e = line.split(' ')[9]
      f = socket.gethostname()
      payload = {'uuid': a, 'major': b, 'minor': c, 'power': d, 'rssi': e, 'hubname': f}
      r = requests.get('http://httpbin.org/get', params=payload)
     # print(r.url)     ##Print the URL
   elif line.startswith('iBeacon'):
      print "Starting script..."
      continue
   else:
      print "Error: invalid input, closing..."
      break

问题是当我检查进程时程序没有运行。系统日志文件指出它在重新启动时启动了命令,但它没有运行。

Aug 19 22:23:35 raspberrypibeacon /USR/SBIN/CRON[2089]: (root) CMD (/home/pi/script.sh > /dev/null 2>&1)

我的 crontab 条目如下所示

@reboot /home/pi/script.sh > /dev/null 2>&1

是 cron 的问题还是我的程序的问题?我的程序在从命令行运行时工作正常,但在由 cron 执行时工作正常。

最佳答案

通常,如果某些东西从命令行运行良好,但作为 cron 作业运行不正常,这是因为 cron 作业的 PATH 设置不同。 PATH 设置得相当保守,以确保不会运行错误的东西,这会导致安全问题。

您可以首先将 ibeacon 程序的完整路径放入 shell 脚本中(即,将其运行为

/path/to/ibeacon scan | ...

不仅仅是

ibeacon scan | ...

该脚本也以 root 身份运行,因此如果 ibeacon 位于您自己的 bin 目录中,则在没有完整路径的情况下将无法找到它。

关于linux - crontab 在重新启动时不启动命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394168/

相关文章:

linux - 在 bash 脚本中结合 sed 和 sort 命令

Python shell 脚本

python-2.7 - 错误: [errno 13] Permission denied - What permissions does bottle py require?

python - 在 python 和 matlab 中填充矩阵的速度

python - 如何查找字典中是否存在键?

c# - 树莓派 C# 上的 GPIO

c++ - 丢包只发生在第一次运行

camera - Raspberry Pi - Raspbian - 运动 - USB 摄像头 - 黑色图像

Python 按钮的功能奇怪地不一样

python-3.x - 模块未找到错误: No module named 'matplotlib' althouth the model seems to be installed