1.虚拟机的IP地址:
2.如何从postgresql中获取表的所有columns名?
select column_name from information_schemas.columns where table_schema='public'( and table_name='users' )
3. nohup输出重定向:
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
eg: nohup python3 refresh.py > my.out 2>& 1 & 即可在后台运行程序并且把输出重定向到文件同目录下的my.out中。其中2>&1:将错误信息重定向到标准输出。指将STDERR重定向到前面标准输出定向到的同名文件中,即&1就是my.out,那么结果就是当执行的命令发生标准错误,那么这个错误也会输出到你指定的输出文件中 ,nohup把refresh.py的输出重定向到文件my.out 同时出现错误也输出到my.out ,然后后台执行。
4.BlockingScheduler调用start函数后会阻塞当前线程。导致主程序下,blocking start之后的语句不会运行,但BackgroundScheduler并不会阻塞之后语句的运行
5.守护进程!
- 执行服务端程序时:通过终端连接到服务器,成功连接后会加载shell环境。终端与shell都是进程,而shell是终端进程的子进程,shell环境下开始执行的程序都是shell的子进程,因此会受到shell进程的影响。如果fork子进程,而后父进程shell退出,这时子进程会被init进程接管,从而脱离了终端的控制。
- 修改子进程的工作目录,因为子进程在创建时会继承父进程的工作目录。
- 创建新会话:使用setid创建新会话,且子进程会担任该会话组的组长 :让进程摆脱原会话,原进程组以及原控制终端的控制。(由于创建守护进程的第一步调用了fork函数来创建子进程,再将父进程退出。由于在调用了fork函数时,子进程全盘拷贝了父进程的会话期、进程组、控制终端等,虽然父进程退出了,但会话期、进程组、控制终端等并没有改变,因此,这还不是真正意义上的独立开来,而setsid函数能够使进程完全独立出来,从而摆脱其他进程的控制。)
- 修改umask,使用umask(0)重新设置文件权限,是为了去掉父进程遗留的文件权限设置。由于umask会屏蔽权限,所以设定为0,可以避免读写文件时碰到权限问题。
- 禁止进程重新打开终端控制:打开一个控制终端的条件必须是session leader。第一次fork,setid之后,子进程成为session leader,因此可以打开终端,建议子进程再fork一个进程,为孙子进程,而后子进程退出。孙子进程此时不再是session leader,进程则无法打开终端,因而孙子进程成为守护进程。
- 重定向孙子进程的标准输入流,标准输出流,标准错误流统一到/dev/null,因为是守护进程,本身已经脱离了终端,那么标准输入流、标准输出流、标准错误流就没有什么意义了。所以都转向到/dev/null,就是都丢弃的意思。
- python读写文件:a 只能写;a+可读可写——>文件不存在则创建,不覆盖只追加
w只能写;w+可读可写——>文件不存在则创建,会覆盖原文件内容
r只能读;r+可读可写(覆盖原文件内容)——>文件不存在会报错
9.PID :进程ID PPID:父进程ID PGID:进程组ID SID:会话ID