0%

Tk预定了不少虚拟事件,比如
[html]
<>,<>,<>,<>,<>,<>,<>
[/html]
等,方便应用程序处理一些公共事务。

References:
[1] Tk event

py2exe已经好久不更新了,pyinstaller则是打包python程序更强大的工具。支持多平台打包,包括Linux,Mac,Solaris,AIX和Windows,而且使用十分简单。

虽然pyinstaller说是实验性的支持python 3,其实已经支持的很好了。

安装

linux平台

pyinstaller开发版已经支持python 3,使用pip3安装支持python 3的开发版pyinstaller

1
$ sudo pip3 install https://github.com/pyinstaller/pyinstaller/archive/python3.zip

windows平台

windows 平台需要根据目标python 版本先安装相应的pywin32

然后下载https://github.com/pyinstaller/pyinstaller/archive/python3.zip,解压缩后,命令行进入该目录执行:

1
cmd&amp;gt; python setup.py install

打包python程序
pyinstaller尚不支持跨平台打包应用程序。

打包应用程序十分简单:

1
$ pyinstaller -F -w your_application_entry.py

在当前目录生成一个新目录dist,生成的可执行文件就在该目录之下。

-F,–onefile 参数指定生成一个可执行文件。
-w, –windowed, –noconsole 参数指示不生成控制台窗口,主要针对Mac和Windows平台。

如果能在当前PATH中找到UPX,会使用UPX来压缩exe文件。

其他参数详见官方文档(参考[1])

References:
[1]PyInstaller Manual

===
[erq]

linux的cron守护程序, 其名字来源于希腊语的chronos,意思为时间。另一说为Command Run ON。

UTS namespaces (CLONE_NEWUTS, Linux 2.6.19) isolate two system identifiers—nodename and domainname—returned by the uname() system call; the names are set using the sethostname() and setdomainname() system calls. In the context of containers, the UTS namespaces feature allows each container to have its own hostname and NIS domain name. This can be useful for initialization and configuration scripts that tailor their actions based on these names. The term “UTS” derives from the name of the structure passed to the uname() system call: struct utsname. The name of that structure in turn derives from “UNIX Time-sharing System”.

在cassandra集群上执行nodeltool status命令时,所有节点的Owns列都为问号?,并且最后有输出”Note: Non-system keyspaces don’t have the same replication settings, effective ownership information is meaningless”,这不是错误,是因为没有指定keyspace之故。

Cassandra集群中的所有节点都要使用相同的种子节点(seed nodes)。种子节点不是单点故障,只是用于当新节点加入集群时启动gossip。种子节点自身不会bootstrap,而其他节点启动时会向种子节点获取信息来bootstrap。对于多数据中心集群,每一个数据中心至少要有一个种子节点,为了容错,每个数据中心可以有多个种子节点,但不推荐将所有的节点都当作种子节点,因为这会降低gossip性能,大约每个数据中心三个种子节点就可以了。

除了root用户外,普通用户可以添加自己的定时服务。/usr/bin/crontab程序设置了组ID,因此普通用户运行crontab时是以crontab组权限运行的。

编辑用户cron配置

1
$ crontab -e 

列出用户cron配置

1
$ crontab -l

更详细的用法见man crontab。

用户crontab文件位置

不同的操作系统,用户的crontab文件位置可能会不同:

1
2
3
4
5
6
Debian / Ubuntu Linux - /var/spool/cron/crontabs/
Mac OS X - /usr/lib/cron/tabs/
FreeBSD/OpenBSD/NetBSD - /var/cron/tabs/
CentOS/Red Hat/RHEL/Fedora/Scientific Linux - /var/spool/cron/
HP-UX Unix - /var/spool/cron/crontabs/
IBM AIX Unix - /var/spool/cron/

===
[erq]

服务器

安装

1
# apt-get install ntp

时间服务器的同步信息

1
# ntpq -p

时间服务器溯源

1
# ntptrace -n

客户端

安装

1
# apt-get install ntpdate

手动同步

1
2
# ntpdate your_time_server_ip
16 May 13:53:44 ntpdate\[14151\]: adjust time server 192.168.6.12 offset 0.058389 sec

参数-d打开debug模式,会输出与时间服务器的交互信息。如果服务器确实运行了,但客户端无法同步时间,且有类似输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ntpdate -d 192.168.1.1
16 May 13:56:13 ntpdate\[14195\]: ntpdate 4.2.6p5@1.2349-o Fri Apr 10 19:04:04 UTC 2015 (1)
transmit(192.168.1.1)
transmit(192.168.1.1)
transmit(192.168.1.1)
transmit(192.168.1.1)
transmit(192.168.1.1)
192.168.1.1: Server dropped: no data
server 192.168.1.1, port 123
stratum 0, precision 0, leap 00, trust 000
refid \[192.168.1.1\], delay 0.00000, dispersion 64.00000
transmitted 4, in filter 4
reference time: 00000000.00000000 Mon, Jan 1 1900 8:05:43.000
originate timestamp: 00000000.00000000 Mon, Jan 1 1900 8:05:43.000
transmit timestamp: d9015a83.e61c3641 Sat, May 16 2015 13:56:19.898
filter delay: 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000
filter offset: 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000
delay 0.00000, dispersion 64.00000
offset 0.000000

16 May 13:56:21 ntpdate\[14195\]: no server suitable for synchronization found

多半是因为防火墙阻止了时间服务器的UDP端口123。

自动同步

1
# crontab -e

在打开的用户crontab文件最后输入:

1
2
# m h dom mon dow command
0 * * * * ntpdate your_time_server_ip

这样一个小时会自动进行一次时间同步。

cron的运行日志见/var/log/syslog。

===
[erq]

Cassandra集群对时间要求很严格,集群中所有节点必须时间严格同步,不然可能会出现各种奇怪的问题。因此最好架设ntp服务来保证各节点时间同步。