Linux设置source环境程序 断电重启和定时任务

需要基本知识

crontab

shell基础

代码

#!/bin/bash
log_path="/home/xxx/xxx.log"   #日志路径
mdate=`date +%Y-%m-%d--%H:%M:%S`  #日期
count=`ps -ef | grep xxx.py | grep -v "grep" | wc -l` #检测xxx.py这个进程
echo "$count"
if [ $count -eq 0 ]; then    #返回0代表无此进程
	echo "xxx Error" $mdate >> $log_path
	source activate tensorflow #激活TensorFlow环境
	cd /home/xxx
	nohup python xxx.py   #运行xxx.py这个程序
	echo "xxx restart" $mdate >> $log_path  #日志
else
	echo "xxx OK" $mdate >> $log_path  #日志
fi
#!/bin/bash
log_path="/home/xxx/xxx.log"   #日志路径
mdate=`date +%Y-%m-%d--%H:%M:%S`  #日期
#请求服务,看服务是否在线
status_code=$(curl -s -o /dev/null -w %{http_code} http://localhost:8008/encode -H 'content-type:application/json' -d '{"id": 1,"texts": ["测试数据"], "is_tokenized": false}' -X POST)
echo $status_code
if [ $status_code -ne 200 ]; then
	echo "xxx Error" $mdate >> $log_path
	source activate tensorflow
	cd /home/xxx
	bash run.sh #自己所写脚本
	echo "xxx restart" $mdate >> $log_path
else
	echo "xxx OK" $mdate >> $log_path
fi
# 使用curl命令检查http服务器的状态
# -m 设置curl不管访问成功或失败, 最大消耗时间为10秒
# -s设置静默连接,不显示连接时的连接速度、时间消耗等信息
# -o将curl下载的页面内容导出到/dev/null(默认会在屏幕显示返回内容)
# -w设置curl命令需要显示的内容%{http_code},指定curl返回服务器的状态码

将上述文件存为shell文件,例 xx.sh

在crontab中添加xx.sh  并设置电视运行

*/20 * * * * /home/xx.sh   此xx.sh文件在home下,需要写路径;每20分钟执行一次xx.sh

 

问题

1.运行xx.sh文件遇到permission denied

查看文件权限,需要将程序权限修改 chmod -X xx.sh

2.上述问题没有解决或出现,syntax error: unexpected end of file

查看文件编码,用vim进入后,输入

:set ff

查看是否为unix,否则转换为unix

:set ff=unix

3.source activate 无法进入虚拟环境

一般为环境变量配置问题,找到activate位置然后加入activate路径

whereis activate 或 which activate
/data/anaconda3/bin/activate
source /data/anaconda3/bin/activate tensorflow #上述代码替换为

参考

crontab是用来定期执行程序的命令

-l   列出目前的时程表

-e  执行文字编辑器来设定时程表

 

查看crontab日志 可以查看不能运行的问题
CentOS: tail -f /var/log/cron
Ubuntu: tail -f /var/log/cron.log

注:Ubuntu 默认没有开启cron log
在w/etc/rsyslog.d/50-default.conf文件中取消#cron.* /var/log/cron.log注释符号#, 并重启rsyslog sudo service rsyslog restart

 

日期格式

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

 * * * * * /bin/ls   每一分钟执行一次 /bin/ls

0 6-12/3 * 12 * /usr/bin/backup   在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务 

*/20 * * * * /data/auto_run.sh   每20分钟执行一次auto_run.sh 

 

参考程序

#!/bin/bash
sec=6
name=Your_thread_name
Thread=`ps -ef | grep $name | grep -v "grep"`
while [ 1 ]
do
count=`ps -ef | grep $name | grep -v "grep" | wc -l`
echo "Thread count: $count"
    if [ $count -gt 0 ]; then
        echo "The thread is still alive!"
        sleep $sec
    else 
        echo "Starting process..."
        cd Your_directory/
        gnome-terminal -x bash -c "./$name;exec bash;"
        sleep 2
        echo "Poocess has started!"	
    fi
done

原理是不断后台检测你的程序有没有在跑,在跑就过几秒再次检测,没在跑马上运行程序

reference

https://www.runoob.com/linux/linux-comm-crontab.html

https://www.dazhuanlan.com/2019/12/19/5dfb1e843484c/

https://blog.csdn.net/baidu_38634017/article/details/108993824

你可能感兴趣的:(Linux设置source环境程序 断电重启和定时任务)