一、cron
在 bash 中可以使用循环和命令替换来实现批量训练任务,通过cron实现定时。
打开终端,输入crontab -e来编辑当前用户的
cron
任务列表,* * * * * command
从左往右分别表示分钟(0-59)、小时(0-23)、日(1-31)、月(1-12)、星期(0-7)、命令,比如上面就表示“每一分钟执行一次命令”
0 2 * * * command
表示每天凌晨两点执行一次命令
0,15,30,45 * * * * command
表示每十五分钟执行一次命令
0-15 * * * * command
表示每小时的前15分钟执行一次命令
*/5 * * * * command
表示每五分钟执行一次命令
以此类推...
cron
的输出通常会发送邮件给用户。如果不需要邮件通知,可以在任务中重定向输出0 2 * * * python /path/to/train_script1.py > /dev/null 2>&1
以下是一个使用 Bash 实现定时批量处理数据的实例:
有多个数据集,分别存放在不同的目录中,并且有一个训练脚本
train_model.py
,可以接受数据集的路径作为参数进行模型训练。1.创建一个名为
process_data.sh
的 Bash 脚本:#!/bin/bash datasets_directory="/path/to/datasets_directory" output_directory="/path/to/output_directory" for dataset_folder in "$datasets_directory"/*; do if [ -d "$dataset_folder" ]; then dataset_name=$(basename "$dataset_folder") output_file="$output_directory/${dataset_name}_model_output.txt" python train_model.py "$dataset_folder" > "$output_file" fi done
2.赋予脚本执行权限:
chmod +x process_data.sh
3.设置cron任务
1.打开终端,输入
crontab -e
来编辑当前用户的cron
任务列表。2.在打开的编辑器中输入:
0 3 * * * /path/to/process_data.sh
这样每天三点脚本就会自动执行。
二、tmux
tmux
可以创建多个会话,每个会话可以包含多个窗口和窗格,用户可以随时断开与tmux
会话的连接,并在以后重新连接,而不会丢失任何正在运行的任务。这对于远程登录和长时间运行的任务非常有用
启动tmux
会话:Linux终端键入tmux
查询会话:tmux ls
创建新窗口:会话中按下ctrl+b,然后按c
查询窗口:ctrl+b然后w
窗口切换:ctrl+b然后键入窗口编号
划分窗格:ctrl+b然后%,当前窗口垂直划分成两个窗格;ctrl+b然后",当前窗口水平划分两个窗格,ctrl+b然后方向键切换窗格
断开会话:ctrl+b然后d
重连会话:终端输入tmux attach -t name
会话、窗口、窗格的关系:
会话:
看作是一个独立的工作环境,一个会话通常包含一个或多个窗口,以及与之相关的各种配置和状态信息
持久性:即使你断开终端连接或关闭终端窗口,会话及其内部的窗口和窗格仍然在后台运行,不会丢失任何正在进行的任务或状态。当你重新连接时,可以恢复到离开时的状态
独立性:每个会话都有自己独立的环境,可以有不同的窗口布局、运行的命令和程序等
窗口:
窗口是会话中的一个独立视图,每个窗口可以运行不同的命令或程序。一个会话可以包含多个窗口,它们共享同一个会话的资源和环境
窗格:
可以在一个窗口中同时查看和操作多个任务
作用:
1.当通过 SSH 连接到远程服务器时,使用tmux
可以确保即使网络连接中断,正在运行的任务也不会被中断。用户可以在重新连接后继续操作
2.在开发过程中,可能需要同时运行多个命令行工具,如编译器、调试器、服务器等。使用tmux
可以将这些工具分别放在不同的窗格中,方便同时查看和操作
3.如果有一个需要长时间运行的任务,如数据处理、模型训练等,可以使用tmux
将该任务放在一个单独的会话中,然后断开连接。这样可以释放本地终端资源,并且在需要时可以重新连接查看任务进度