Python实现上传文件到服务器Linux定时任务+(Ubuntu)日志定向

 

实验室用32和树莓派做了胎心采集硬件,为了方便以后去医院和实现家用便捷化,初步先写一个远程获取数据服务,做到医生或用户采集完数据后自动上传服务器,我们可以不用现场去测数据,直接到服务器获取下载数据。

在已经实现硬件采集完数据后通过蓝牙上传到树莓派固定路径的基础之上,我们完成Python上传文件到云服务器,以及Linux的定时任务和Cron日志重定向。


一、paramiko上传文件到服务器

pip install paramiko==2.4.2

import paramiko
import datetime
import os


hostname = '服务器ip'
username = '用户名'
password = '密码'
port = 端口号,一般是22

def upload(local_dir, remote_dir):
    try:
        t = paramiko.Transport((hostname, port))
        t.connect(username=username, password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        print('upload file start %s ' % datetime.datetime.now())
        for root, dirs, files in os.walk(local_dir):
            # 遍历文件夹下的文件夹和文件 dirs为文件夹、files为文件
            print('[%s][%s][%s]' % (root, dirs, files))
            for filespath in files:
                local_file = os.path.join(root, filespath)
                print(11, '[%s][%s][%s][%s]' % (root, filespath, local_file, local_dir))
                a = local_file.replace(local_dir, '').replace('\\', '/').lstrip('/')
                remote_file = os.path.join(remote_dir, a)
                print(22, remote_file)
                try:
                    sftp.put(local_file, remote_file)
                except Exception as e:
                    sftp.mkdir(os.path.split(remote_file)[0])
                    sftp.put(local_file, remote_file)
                    print("66 upload %s to remote %s" % (local_file, remote_file))
            for name in dirs:
                local_path = os.path.join(root, name)
                a = local_path.replace(local_dir, '').replace('\\', '')
                remote_path = os.path.join(remote_dir, a)
                print(33, remote_path)
                try:
                    sftp.mkdir(remote_path)
                    print(44, "mkdir path %s" % remote_path)
                except Exception as e:
                    print(e)
        print('77,upload file success %s ' % datetime.datetime.now())
        t.close()
    except Exception as e:
        print(e)


if __name__ == '__main__':
    local_dir = r'树莓派文件路径'
    remote_dir = r'要保存的服务器路径'
    upload(local_dir, remote_dir)

二、Linux开启定时任务

1、添加定时任务

crontab -e

  • -u:这个参数可以让我们去编辑其他人的crontab,如果没有加上这个参数的话就会开启自己的crontab。例如crontab -u root -e, 开启root用户下定时任务
  • -l:可以列出crontab的内容
  • -r:可以移除crontab
  • -e:可以使用系统预设的编辑器,开启crontab
  • -i:可以移除crontab,会跳出系统信息让你再次确定是否移除crontab

2、编辑定时任务

# 假设我们刚才的文件传输python脚本命名为ecgtran.py,保存在/home/pi/Desktop/路径下,我们设置在每天的下午4点半执行一次

30 16 * * *  python /home/pi/Desktop/ecgtran.py

需要注意的是,*之间要用空格隔开;五个符号位分别从左到右代表分、时、日、月、星期

  • 分钟:0~59的整数
  • 小时:0~23的整数
  • 日期:1~31的整数
  • 月份:1~12的整数
  • 星期:0~7(0和7表示星期天)的整数

编辑完后保存退出。控制台回显“crontab:installing new crontab” 表示添加调度任务成功。

3、查看cron进程

ps -ax|grep cron

三、Cron日志重定向

/etc/cron.hourly   /etc/cron.daily   /etc/cron.weekly     /etc/cron.monthly

这四个目录分别 记录了小时、日、周、月的定时任务

ubuntu系统内部是没有cron.log的,因此许多小伙伴在/var/log/路径下找不到cron.log。因此这就需要Cron日志重定向。

  • 1、修改rsyslog 

vim /etc/rsyslog.conf  将#cron.*   的注释删除

  • 2、重启rsyslog

service rsyslog  restart

  • 3、查看cron日志

vim /var/log/cron.log  如果没有就再重启一下定时任务,重启后就能看到cron.log日志文件啦!


可见我是每分钟执行 python3 /home/pi/Desktop/ecgtran.py 这条命令的。 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值