要求:
在指定时间删除/home/app下所有文件和目录并删除程序本身和清除历史记录
代码如下:
#!/usr/bin/env python
#coding:utf-8
import os
import sys
import time
import signal
import sched
time_run = "2015-09-16 15:45:00" # 什么时候执行
cmd_run = 'rm -rf /home/app/*;history -c;' # 要执行的命令,最后面记得加分号
# 下面是生成daemon.pyc的命令
# python -m py_compile daemon.py
file_run = os.path.dirname(os.path.realpath(__file__)) + '/' + os.path.basename(__file__)
cmd_run = cmd_run + 'rm -f %s' % file_run
def create_daemon(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
# 忽略终端I/O信号,STOP信号
signal.signal(signal.SIGTTOU, signal.SIG_IGN)
signal.signal(signal.SIGTTIN, signal.SIG_IGN)
signal.signal(signal.SIGTSTP, signal.SIG_IGN)
signal.signal(signal.SIGHUP, signal.SIG_IGN)
# 结束父进程,使得子进程成为后台进程
try:
if os.fork() > 0:
sys.exit(0)
except OSError, error:
print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror)
sys.exit(1)
# 建立一个新的进程组,在这个新的进程组中,子进程成为这个进程组的首进程,以使该进程脱离所有终端
os.setsid()
# 再次新建一个子进程,退出父进程,保证该进程不是进程组长,同时让该进程无法再打开一个新的终端
try:
pid = os.fork()
if pid > 0:
print 'Daemon PID %d' % pid
sys.exit(0)
except OSError, error:
print 'fork #2 failed: %d (%s)' % (error.errno, error.strerror)
sys.exit(1)
for f in sys.stdout, sys.stderr: f.flush()
MAXFD = os.sysconf('SC_OPEN_MAX')
for i in xrange(3, MAXFD):
try:
os.close(i)
except:
pass
si = file(stdin, 'r')
so = file(stdout, 'a+')
se = file(stderr, 'a+', 0)
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
# 改变工作目录,使得进程不与任何文件系统联系
os.chdir('/')
# 将文件屏蔽字设置为0
os.umask(0)
# 忽略SIGCHLD信号
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
run_daemon()
def run_daemon():
time_array = time.strptime(time_run, "%Y-%m-%d %H:%M:%S")
time_stamp = int(time.mktime(time_array))
now_stamp = int(time.time())
if now_stamp > time_stamp:
sys.exit(1)
diff_time = time_stamp - now_stamp
scheduler = sched.scheduler(time.time, time.sleep)
scheduler.enter(diff_time, 1, Do, ())
scheduler.run()
def Do():
os.system(cmd_run)
if __name__ == '__main__':
create_daemon()
编译代码并运行:
[root@test ~]# python -m py_compile daemon.py
[root@test ~]# python daemon.pyc