簡體   English   中英

BASH-crontab始終運行,但python腳本除外

[英]BASH - crontab is always running except the python script

當我從shell /var/tmp/server_always_alive.sh手動運行此腳本時,沒有問題。 但是當我讓它與crontab一起運行時,即使所有邏輯都正確,它也永遠不會運行。

我如何通過此crontab使python server.py運行?

sun@sun-Inspiron-One-2320:~$ uname -a
Linux sun-Inspiron-One-2320 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

/var/tmp/server_always_alive.sh:

#!/bin/bash
echo "test 1"
echo "test 2"
# 58888 TCP port is server port of server.py, if its not running server.py has to execute auto
main=$(export DISPLAY=:0.0 && lsof -i tcp:58888 | grep LISTEN | awk '{print $2}')
if [ -z "$main" ]; then
        export DISPLAY=:0.0 && python /var/tmp/python/server.py &
        sleep 2
        break
fi
echo "test 3"
echo "all runs except python server.py"

crontab:

* * * * * /var/tmp/server_always_alive.sh &

DISPLAY=:0.0表示您的python'server'正在連接到X服務器。 為什么?

Cron將沒有必要的X“ cookie”。 ,幾乎可以肯定不會以與X服務器相同的用戶身份運行。

編輯:我會一口氣說出您正在以正確的用戶身份運行。

編輯:如果您確實需要從cron運行圖形程序,請嘗試

xhost +si:localuser:`whoami`

供其他鍛煉參考。

步驟1:將python腳本放在以下腳本=將其保存在/var/tmp/main.sh

A)不基於GUI

#!/bin/sh
script='/my/python/script/is/here/ok.py'
/usr/bin/python $script &

B)GUI(GTK / TK等)

#!/bin/sh
script='/my/python/script/is/here/ok.py'
export DISPLAY=:0.0 && /usr/bin/python $script &

步驟2:現在使用以下命令在/etc/init.d/scriptname_what_ever_feed_i_name創建文件(復制粘貼)

#! /bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/home/CHANGE _ ____ HERE ______ to the Step 1 file name
PIDFILE=/var/run/scriptname.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

case "$1" in
  start)
     log_daemon_msg "Starting feedparser"
     start_daemon -p $PIDFILE $DAEMON
     log_end_msg $?
   ;;
  stop)
     log_daemon_msg "Stopping feedparser"
     killproc -p $PIDFILE $DAEMON
     PID=`ps x |grep feed | head -1 | awk '{print $1}'`
     kill -9 $PID       
     log_end_msg $?
   ;;
  force-reload|restart)
     $0 stop
     $0 start
   ;;
  status)
     status_of_proc -p $PIDFILE $DAEMON atd && exit 0 || exit $?
   ;;
 *)
   echo "Usage: /etc/init.d/atd {start|stop|restart|force-reload|status}"
   exit 1
  ;;
esac

exit 0

步驟3:使其可執行chmod +x /etc/init.d/scriptname_what_ever_feed_i_namechmod -R 777 /etc/init.d/scriptname_what_ever_feed_i_name以便任何用戶都可以執行而無需sudo。

步驟4:例如:

/etc/init.d/scriptname_what_ever_feed_i_name restart

要么

* * * * * /etc/init.d/scriptname_what_ever_feed_i_name restart

工作-更好/更安全。

ps aux | grep python
root      5026  0.5  0.3 170464 19336 pts/0    S    07:40   0:00 /usr/bin/python /var/tmp/python/server.py

現在,您可以使用命令/etc/init.d/scriptname手動啟動或停止或cron等啟動和停止python腳本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM