RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 870577
Accepted
Ole Lukøje
Ole Lukøje
Asked:2020-08-19 20:21:02 +0000 UTC2020-08-19 20:21:02 +0000 UTC 2020-08-19 20:21:02 +0000 UTC

如何在计算机关闭时通过 systemd 正确卸载 samba 球?

  • 772

有一个 systemd 单元:

[Unit]
Description=home storage folder
After=remote-fs-pre.target
After=network.target
After=network-online.target
Wants=network-online.target
BindsTo=network-online.target
Conflicts=umount.target
Before=umount.target

[Mount]
What=//172.16.100.1/storage
Where=/home/username/Shared/storage
Type=cifs
Options=noauto,x-systemd.automount,noexec,noperm,iocharset=utf8,uid=1000,gid=1000,credentials=/etc/share_creds/home_samba

[Install]
WantedBy=remote-fs.target  

安装很棒。systemctl stop它通常在没有 narekariya的情况下通过卸载。
但是,如果您关闭或重新启动安装了球的计算机,它会在尝试卸载它时挂起一分半钟。
请告诉我选择哪种方式以在关闭时摆脱挂起。

UPD
一些澄清:
1. Kubuntu 18.04.1
2. 自然,NetworkManager 驱动网络

UUPD
怀着感激之情,我将决定如何在 WiFi 连接中断之前捕捉到这一时刻,以便将卸载命令推送到它前面。

到目前为止,它只能这样工作:

#!/bin/bash
while read -r line; do
    [[ "$line" =~ deactivating ]] && {
        /bin/systemctl stop home-username-Shared-storage.mount
    }
done < <(LANG=en_US nmcli monitor)

但。再次。测试时它可以工作。也就是说,如果我手动运行这个脚本,通过启动systemctl start home-username-Shared-storage.mount它来安装球,然后当 WiFi 关闭时,球将被很好地卸载。但是,如果您让机器重新启动,它会再次冻结一分半钟并试图卸下球。

UUUPD作为一个拐杖,到目前为止我一直在考虑添加到[Mount] TimeoutSec=5同时,5 秒后卸载简单地以错误结束,然后计算机安静地重新启动。但是如果有比仅仅扼杀 umount 过程更漂亮的方法,那么我将不胜感激。

linux
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Ole Lukøje
    2020-08-21T08:40:55Z2020-08-21T08:40:55Z

    一般来说,正如聪明人所说,“吸食法力”。法力规则!!!
    最初,任务是访问主服务器上的文件夹并在意外断开连接时摆脱冻结。

    有以下输入:

    1) 小型家庭服务器。
    2) 它有需要的文件,并且可以从家用计算机或笔记本电脑上编辑,并不总是由我来编辑,但我希望随时掌握最新版本。
    3)还有一个基于OpenVPN的VPN服务器(分别有一个外部IP可以连接) 4 )
    有一台Kubuntu 18.04的笔记本电脑

    所以。如果在我进入文件夹并在那里做某事或忘记关闭它的那一刻,有人打电话给我,那么文件管理器会紧紧挂起,直到硬重启。

    已经在研究issue的过程中,找了很多参考,autofs但是我不想放弃通过find来实现这一切的想法(已经是现在了)systemd

    如果有人有用,我会很高兴。我也很乐意接受知识渊博的人就这项任务的实施提出建设性的批评和实用的建议。

    究竟发生了什么:

    mkdir -p ~/Shared/storage
    sudo vi /lib/systemd/system/home-<username>-Shared-storage.automount

    [Unit]
    Description=automounts home storage share
    Requires=NetworkManager.service home-connection-monitor.service
    
    [Automount]
    Where=/home/<username>/Shared/storage
    TimeoutIdleSec=301
    
    [Install]
    WantedBy=remote-fs.target
    

    sudo vi /lib/systemd/system/home-<username>-Shared-storage.mount

    [Unit]
    Description=home storage folder
    Requires=NetworkManager.service home-connection-monitor.service
    After=home-connection-monitor.service
    
    [Mount]
    What=//<local-share-ip>/storage
    Where=/home/<username>/Shared/storage
    Type=cifs
    Options=nofail,_netdev,noauto,iocharset=utf8,uid=<user_uid>,gid=<user_gid>,credentials=</path/to/file/with/credentials>
    ForceUnmount=yes
    LazyUnmount=yes
    TimeoutSec=5  
    


    sudo vi /lib/systemd/system/home-connection-monitor.service

    [Unit]
    Description=home connection monitor
    After=home-<username>-Shared-storage.automount
    Requires=NetworkManager.service home-<username>-Shared-storage.automount
    
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/home-connection-monitor
    Restart=on-failure
    
    [Install]
    WantedBy=remote-fs.target 
    


    sudo vi /usr/local/bin/home-connection-monitor

    #!/bin/bash
    host='<local-share-ip>'
    vpn_connection_name='<yor-vpn-connection-name>'
    test_internet_host='208.67.222.222' # к примеру, можно любой доступный только через интернет.
    
    connect_to_home()
    {
        printf '%s\n' "$(date +"%d_%m_%Y %H:%M:%S") Trying connecting to ${host}" # Задел на будущее для создания лог файла
        until ping -W2 -c1 "${test_internet_host}" &>/dev/null; do
            ping -W1 -c1 "${host}"  &>/dev/null && break
            sleep 1
        done
        ping -W1 -c1 "${host}"  &>/dev/null && {
            printf "$(date +"%d_%m_%Y %H:%M:%S") Connection for ${host} [ \\e[32m%s\\e[m ]\\n" 'established'
            return 0
        }
        until ping -W1 -c1 "${host}" &>/dev/null; do
    
            if nmcli con up "${vpn_connection_name}"; then
                if ping -W1 -c1 "${host}" &>/dev/null; then
                    printf "$(date +"%d_%m_%Y %H:%M:%S") Connection for ${host} [ \\e[32m%s\\e[m ]\\n" 'established'
                    return 0
                fi
            else
                sleep 2
            fi
    
        done
    }
    
    connect_to_home && {
        while ping -W1 -c1 "${host}" &>/dev/null; do
            sleep 1
        done
        exit 1
    }
    

    重要的!!!<和> 之间的所有内容都替换为您自己的数据
    重要!!!.mount 和 .automount 文件的名称对应于挂载点路径,即如果挂载点路径/media/samba,则这些文件应命名media-samba.mount为media-samba.automount

    sudo systemctl daemon-reload
    sudo systemctl enable home-karpovan-Shared-storage.{,auto}mount
    sudo systemctl enable home-connection-monitor

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5