经常地,程序在开始执行某项任务需要从文件读取数据。在任务完成后数据得到更新,新的数据会覆写到之前读取的文件中。怎么将数据写回到文件呢?一个直觉的方案是:
with open(datafile, 'w') as f:
f.write(data)
在通常情况下,它能够正确地完成写回数据的任务。如果出于某种原因文件打开失败,通常也不会有人忘记处理。但是,当写入操作失败了呢?
时不时地编译程序看到 gcc 大把地警告:
警告:忽略声明有 warn_unused_result 属性的‘write’的返回值 [-Wunused-result]
在 Python 中,写文件时如果失败会抛出异常,上层的异常处理机制似乎能够作出相应的应对。但是,真的尽力了吗?
我也曾以为这样不会出问题。直到有一天,本地信箱里出现了这样的错误信息:
OSError: [Errno 28] No space left on device
可能是由于内核的某个 bug,我本来就所剩无几的 /home 分区没空闲空间了。一个 cronjob 在写回数据时发生异常。于是,新的数据没能写入文件。那旧数据呢?因为是以「写」方式打开文件,所以它也没了……
在那次事件之后,那段写回数据的代码变成了这个样子:
with open(datafile + '.tmp', 'w') as f:
f.write(t)
# if the above write failed (because disk is full), the old data should be kept
os.rename(datafile + '.tmp', datafile)
注意:测试表明不使用with或者显式地关闭文件的做法是有问题的,即使在 CPython 中。
try:
open('/dev/full', 'w').write('abc')
except:
print('fine.')
在 Python 2.7 中会打印错误信息,Python 3.3.0 中无任何信息。都没有预料中的异常被捕获。
>>>python t.py
>>>python2 t.py
close failed in file object destructor:
IOError: [Errno 28] No space left on device
今天之所以写这个,是因为 Arch Linux CN 的群服务器遇到磁盘配额用尽的问题。XMPP 服务器 Prosody 在写入联系人信息时只写了一小部分,大部分数据丢失。这里有 bug 报告。
2013年7月21日更新:Sublime Text 2 作为商业软件,竟然不仅不采用「新建+重命名」的方式写入文件,而且连写入是否成功都不检查。难怪 Linux 版中文输入法的问题迟迟不修复,原来连造成用户数据丢失的问题都无所谓。
一个域名;
一个有公网的服务器或者云服务器;
拥有root或者sudo权限。
goddady的域名,AWS的免费服务器(Ubuntu20)
安装AWS服务器,本次安装的操作系统是Ubuntu20,对于ssh怎么登陆自行解决。
把goddady的域名和ASW的公网IP绑定,公网IP就是ssh登陆的ip地址。
这中间需要填写域名,比如godaddy注册的域名为meet.block.xyz,这里就填写这个。
另外一个需要选择的是https的证书,默认选择就可以,后面再重新生成,命令为
这里需要填写邮件,用来接收相关资讯,主要是这个证书免费,有过期时间提醒,需要手动续签。
这样就完全安装完成。
问题1:用公网的虚拟云服务器进行安装完成后,可能会出现chrome打开meet.block.xyz没有反应?
原因:meet.block.xyz域名需要把主机的hostname和dnsdomainname修改为对于网址。如果贸然修改/etc/hostname可能会无效,因为对于多数的虚拟云主机是不支持修改hostname,需要修改/etc/cloud/cloud.cfg中的preserve_hostname: true
执行dnsdomainname和hostnamectl查看,sudo hostnamectl set-hostname meet.block.xyz设置
/etc/hosts中要有127.0.0.1 meet.block.xyz meet
其他:
问题2:可能在解决问题1之后可能还是无法访问meet.block.xyz?
原因:因为多数的虚拟云主机是通过vhost配置的网络,主机会有两个网络,一个公网,一个私网,公网就是ssh登陆的网址,私网用ip a查看,局域网的那个ip就是的。
最后新增两个参数:
启动Secure domain功能, 限制有账号的人才能开新会议室
编辑/etc/prosody/conf.avail/jitsi4james.ddns.net.cfg.lua,
将认证方式方式由anonymous改为internal_plan
并加入:(其他人可以加入)
VirtualHost "guest.jitsi4james.ddns.net"
authentication = "anonymous"
c2s_require_encryption = false
编辑/etc/jitsi/meet/jitsi4james.ddns.net-config.js,加入
anonymousdomain: 'guest.jitsi4james.ddns.net',
systemctl status
电脑和手机app均可使用,对于性能要求,目前没有测试。
1. 官方快速安装
2. 配置细节
3. 配置noip自动启动
4. YOUTUBE安装jitsi
5. 安装jitsi文章
6. youtue参考安装2
欢迎交流,wechat:tlxbp930
https://hellolinux.xyz
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)