linux ubuntu系统运行python虚拟环境,启用端口服务和定时任务
查找当前系统python虚拟环境
find ~ -name “activate” -type f
删除虚拟环境
rm -rf /path/to/virtualenv
创建一个python虚拟环境
python -m venv venv
激活某一个虚拟环境
source /home/mine/pyproject/congesstion/venv/bin/activate
退出某一个虚拟环境
deactivate
查看crontab运行日志
grep CRON /var/log/syslog
查看crontab打印的脚本日志
tail -n 100 /home/mine/pyproject/congesstion/cron.log (只看最近100行) 加上-f可以一值看
tail -n 100 -f cron.log
cat /home/mine/pyproject/congesstion/cron.log (看所有)
创建crontab
crontab -e
查看当前crontab任务
crontab -l
例如,如果您在 crontab 中设置了一个任务如下:
bash
-
-
-
-
- /path/to/your_script.sh
这个任务会每分钟运行一次 /path/to/your_script.sh,无论上一次执行是否完成。
- /path/to/your_script.sh
-
-
-
crontab 的运行机制是定时执行任务,不管上一次任务是否完成。这意味着,如果您设置了一个每分钟运行的任务,该任务将每分钟被执行一次,即使上一个任务尚未完成。
如果您希望确保上一个任务完成后才开始下一个任务,您可能需要在脚本中自行添加检查机制,或者使用 flock 命令来确保同时只运行一个实例。例如:
bash
-
-
-
-
- /usr/bin/flock -n /tmp/your_script.lock /path/to/your_script.sh
-
-
-
flock 命令会创建一个锁文件,以确保同时只有一个实例在运行。
创建任务示例
*/10 * * * * cd /home/mine/pyproject/congesstion && /home/mine/pyproject/congesstion/venv/bin/python /home/mine/pyproject/congesstion/abnormal_congestion_info_multiprocessing.py >> /home/mine/pyproject/congesstion/cron.log 2>&1
查看当前运行的python程序
ps aux | grep python
启动一个接口服务,让窗口关闭不影响服务
nohup python info2db.py > output.log 2>&1 &
nohup:忽略挂断信号
> output.log:将标准输出重定向到 output.log 文件。
2>&1:将标准错误输出也重定向到 output.log 文件。
&:让进程在后台运行。
查看某一py脚本运行情况
ps aux | grep info2db.py
(mypyproject) mine@mine:~/pyproject/APIdata$ ps aux | grep info2db.py
mine 2188105 0.0 0.8 43588 33868 pts/0 T 12:28 0:00 python info2db.py
mine 2188115 0.0 0.8 117372 33920 pts/0 Tl 12:28 0:00 /home/mine/pyproject/mypyproject/bin/python info2db.py
mine 2248556 0.0 0.0 6680 2304 pts/0 S+ 13:12 0:00 grep --color=auto info2db.py
从你提供的输出看,有两条关于 info2db.py
的进程记录,但它们的状态(STAT 列)都是 T
或 Tl
。在 ps
命令的输出中:
- T 表示 “Stopped”,即进程已暂停(通常是由于接收到停止信号,如 Ctrl+Z)。
- Tl 中的
T
同样表示进程被停止,而后面的l
是额外的标志(例如反映出该进程是多线程等)。
也就是说,虽然这些进程还存在于进程列表中,但它们目前并没有处于“运行”状态,而是被挂起了。
如何验证和处理
-
确认状态
你可以使用以下命令确认进程状态:ps -o pid,stat,cmd -p 2188105,2188115
如果状态仍然显示为
T
,说明它们正处于暂停状态。 -
恢复运行(如果需要)
如果你希望让它们继续运行,可以通过如下方式恢复:- 通过终端控制:如果这些进程是你当前终端的作业,可以试试
bg
命令来让暂停的作业在后台继续运行。 - 或者直接发送继续信号:
这样会发送kill -CONT 2188105 kill -CONT 2188115
CONT
信号,使进程从停止状态恢复执行。
- 通过终端控制:如果这些进程是你当前终端的作业,可以试试
-
终止进程(如果你想退出)
如果你的目标是关闭这个脚本,你可以发送 SIGTERM:kill 2188105 kill 2188115
如果进程迟迟不响应,可再使用 SIGKILL 信号(-9)强制终止:
kill -9 2188105 kill -9 2188115
小结
-
是否在运行?
你看到的两个info2db.py
进程都处于 停止(suspended) 状态,而不是正在正常运行。 -
如何恢复/关闭?
如果想继续运行,可用kill -CONT
或bg
命令恢复;如果想终结这个脚本,则用kill
命令结束进程。
如果你在使用 nohup 启动脚本时,本不希望它进入暂停状态,请检查是否在启动时意外按下了 Ctrl+Z 或其他导致进程停住的操作。更多关于后台运行和作业控制的细节,我们可以进一步讨论。
关闭所有python进程
【当用定时任务的时候,会出现上一个任务没完成,后面的任务又开始的情况,有时会用到】
pkill -f python
ubuntu服务器进入root用户
sudo passwd root 设置root初始密码
su -
exit 退出root用户