分类: linux

  • device is busy

    umount.nfs4: /data: device is busy

    在Linux管理umount设备时,时常会遇到”device is busy”, 如果umount一个文件系统碰到这种情况,并且你并没有在所需卸载的目录下。那么很可能有用户或进程在使用那个目录。

    # umount /mnt

    umount: /mnt: device is busy

    umount: /mnt: device is busy

    那么必须用fuser命令来查看process ID和进程的拥有者,比如:

    # fuser -mu /mnt

    /mnt: 25781c(root)

    # kill -9 25781

    # umount /mnt

    像下面这种情况,就代表rhythmbox用户在使用那个目录。然后也可以用fuser -ck /dev/sdc1来杀进程。

    # fuser -m /dev/sdc1

    /dev/sdc1: 538

    # ps auxw|grep 538

    donncha 538 0.4 2.7 219212 56792 SLl Feb11 11:25 rhythmbox

    如果所有这些努力还不奏效,杀掉该进程后,那么这个时候可能需要加-f -l参数,强制卸载

    # umount -f -l /mnt

    NOTE:

    可用下面的命令来检查SATA硬盘的坏块。

    # badblocks -v /dev/sda

    # badblocks -v /dev/sdb

    # badblocks -v /dev/mapper/vgosi-lvol1

    Checking blocks 0 to 10477568

    Checking for bad blocks (read-only test): done

    Pass completed, 0 bad blocks found.

  • Linux Crontab 定时任务

    linux内置的cron进程能帮我们实现这些需求,cron搭配shell脚本,非常复杂的指令也没有问题。

    cron介绍

    我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。

    • /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
    • /etc/crontab 这个文件负责调度各种管理和维护任务。
    • /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
    • 我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。

    crontab的使用

    我们常用的命令如下:

    crontab [-u username]    //省略用户表表示操作当前用户的crontab
        -e      (编辑工作表)
        -l      (列出工作表里的命令)
        -r      (删除工作作)

    我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。

    crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有

    • * 取值范围内的所有数字
    • / 每过多少个数字
    •  从X到Z
    • 散列数字

    实例

    实例1:每1分钟执行一次myCommand

    * * * * * myCommand

    实例2:每小时的第3和第15分钟执行

    3,15 * * * * myCommand

    实例3:在上午8点到11点的第3和第15分钟执行

    3,15 8-11 * * * myCommand

    实例4:每隔两天的上午8点到11点的第3和第15分钟执行

    3,15 8-11 */2  *  * myCommand

    实例5:每周一上午8点到11点的第3和第15分钟执行

    3,15 8-11 * * 1 myCommand

    实例6:每晚的21:30重启smb

    30 21 * * * /etc/init.d/smb restart

    实例7:每月1、10、22日的4 : 45重启smb

    45 4 1,10,22 * * /etc/init.d/smb restart

    实例8:每周六、周日的1 : 10重启smb

    10 1 * * 6,0 /etc/init.d/smb restart

    实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

    0,30 18-23 * * * /etc/init.d/smb restart

    实例10:每星期六的晚上11 : 00 pm重启smb

    0 23 * * 6 /etc/init.d/smb restart

    实例11:每一小时重启smb

    0 */1 * * * /etc/init.d/smb restart

    实例12:晚上11点到早上7点之间,每隔一小时重启smb

    0 23-7/1 * * * /etc/init.d/smb restart
  • 一键更换yum 源

    bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh)

    参考:LinuxMirrors: GNU/Linux 一键更换国内软件源脚本 (gitee.com)

  • pve CT容器虚拟机开启支持nfs

    创建时需要取消 无特权容器 选项

    取消五特权的容器选项

  • Transport endpoint is not connected

    mount了mfs后,重新挂载之后,出现如下错误:

    /usr/local/mfs/bin/mfsmount -H 192.168.103.101 /mnt/ 
    fuse: bad mount point `/mnt/’: Transport endpoint is not connected 
    see: /usr/local/mfs/bin/mfsmount -h for help

    解决方法:

    1、kill进程;

    2、umount

    3、重新mount

    ps aux | grep mfs

    umount –l /mnt/usr/local/mfs/bin/mfsmount -H 192.168.103.101 /mnt/

  • 安装Rclone进行挂载

    安装Rclone进行挂载

    curl https://rclone.org/install.sh | sudo bash

    挂载到本地

    centos需要下载fuse

    yum -y install fuse
    #新建本地文件夹,位置可以自己选
    mkdir /data/aliyunwebdav
    #挂载
    rclone mount DriveName:Folder LocalFolder --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty

    #创建挂载目录

    mkdir -p /home/onedrive

    #挂载

    #如果需要后台保持运行,使用下面的命令

    nohup rclone mount remote:path/to/files /home/onedrive &

    设置开机自启

    #将后面修改成你上面手动运行命令中,除了rclone的全部参数
    command="mount DriveName:Folder LocalFolder --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty"
    #以下是一整条命令,一起复制到SSH客户端运行
    cat > /etc/systemd/system/rclone.service <<EOF
    [Unit]
    Description=Rclone
    After=network-online.target
    
    [Service]
    Type=simple
    ExecStart=$(command -v rclone) ${command}
    Restart=on-abort
    User=root
    
    [Install]
    WantedBy=default.target
    EOF

    开始启动:

    systemctl start rclone
    

    设置开机自启:

    systemctl enable rclone
    

    其他命令:

    重启:systemctl restart rclone
    停止:systemctl stop rclone
    状态:systemctl status rclone
  • Linux关机命令和重启命令说明

    在Linux中,常用的关机命令shutdown、halt、poweroff、init;重启命令有:reboot。本文将主要为大家带来一些常用的关机命令以及各种关机命令之间的区别和具体用法。

    upLinux命令大全

    关机命令:

    1、halt:立刻关机 

    2、poweroff:立刻关机

    3、shutdown -h now:立刻关机(root用户使用) 

    4、shutdown -h 10:10分钟后自动关机 

    注意,如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启

    重启命令

    1、reboot 立即重启

    2、shutdown -r now 立刻重启(root用户使用) 

    3、shutdown -r 10 过10分钟自动重启(root用户使用)  

    4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 

    如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启

    具体说明:

    1、shutdown——最安全的关机命令

    在Linux中,shutdown可以说是最安全的关机命令,可以通过参数h或-r的配合来完成关机或重启。不过需要注意,只有拥有root权限后,才能够使用该命令。

    shutdown 参数说明:

      [-t] 在改变到其它runlevel之前﹐告诉init多久以后关机。

      [-r] 重启计算器。

      [-k] 并不真正关机﹐只是送警告信号给

      每位登录者〔login〕。

      [-h] 关机后关闭电源〔halt〕。

      [-n] 不用init﹐而是自己来关机。不鼓励使用这个选项﹐而且该选项所产生的后果往往不总是你所预期得到的。

      [-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数﹐但是可以输入一个用来解释的讯息﹐而这信息将会送到每位使用者。

      [-f] 在重启计算器〔reboot〕时忽略fsck。

      [-F] 在重启计算器〔reboot〕时强迫fsck。

      [-time] 设定关机〔shutdown〕前的时间。

    2、halt—-最简单的关机命令

    其实halt命令就是调用shutdown -h。当halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核。

    参数说明:

      [-n] 防止sync系统调用﹐它用在用fsck修补根分区之后﹐以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。

      [-w] 并不是真正的重启或关机﹐只是写

      wtmp〔/var/log/wtmp〕纪录。

      [-d] 不写wtmp纪录〔已包含在选项[-n]中〕。

      [-f] 没有调用shutdown而强制关机或重启。

      [-i] 关机〔或重启〕前﹐关掉所有的网络接口。

      [-p] 该选项为缺省选项。就是关机时调用poweroff。

    3、poweroff——最常用的关机命令

    对于poweroff,可以说是目前最常用的关机命令了,其用法和 halt 也是基本相同的,这里就不多说了。

    4、reboot——重启命令

    reboot的工作过程halt是基本差不多的﹐不过它的作用是引发主机重启﹐而halt则是关机。它的参数也与halt相差不多。

    5、init

    init是Linux系统操作中不可缺少的程序之一。init的进程号始终为1,所以发送TERM信号给init会终止所有的用户进程,守护进程等。init定义了8个运行级别,init 0为关机,init 1为重启。

  • CentOS 8 更换yum国内源

    centos7和centos8的版本不同,个人在实践当中发现centos7更换yum源的配置方法在centos8当中并不适用,以下为个人实现centos8配置国内yum源过程:

    操作的主要思路为:

    • 在不删除源文件的基础上,将源文件备份
    • 下载最新centos8国内的yum源文件
    • 更换地址

    主要实现的代码如下:

    •   进入root,切换至yum.repos.d目录
    • cd /etc/yum.repos.d/
    •   创建新文件夹并将源文件备份为repo.bak
    • mkdir backup && mv *repo backup/
    •   下载国内yum源文件
    • curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
    •   更新下载yum源地址
    • sed -i -e"s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g " /etc/yum.repos.d/CentOS-*
    • sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*
    •   生成缓存
    • yum clean all && yum makecache
  • Centos7 安装nginx

    安装步骤

    1、添加源   默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源:

    rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

    2、安装Nginx 通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。

    yum install -y nginx

    3、启动Nginx并设置开机自动运行

    sudo systemctl start nginx
    sudo systemctl enable nginx

    4、浏览查看效果

    浏览器输入:127.0.0.1,当看到下周所示内容代表安装成功。

    5、其他配置项

    1、修改nginx服务启动者

    vim /etc/nginx/nginx.conf

    在前10行中进行查找 user nginx; 修改为user root;

    这一步的目的是为了让nginx服务拥有root权限,因为有些时候会出现403错误码

    Nginx常用命令

    nginx -t

    检查配置文件是否正确,在每次修改nginx配置后执行命令进行查看。

    nginx -s reload

    这个命令大家肯定非常熟悉,重启nginx服务。