MacOS'da ağdaki/nas serverdaki bir klasöre eriştiğinizde o klasör mount ediliyor ve belli bir süre açık kalıyor fakat sonrasında unmount edilerek bağlantı kopuyor. Dolayısı ile bu klasör üzerinde işleminiz varsa hata veriyor (örneğin ben ağdaki bu klasöre Kopia yazılımı ile 6 saatte bir yedekleme yaptırıyorum). Bu hatayı engellemek için launchd yöntemini kullanarak belli aralıklarla klasörü mount etmesini sağlayacağız. Bu işlemi adım adım aşağıya yazıyorum (siz bu yazıyı okuduğunuzda macos güncellemeleri nedeniyle belli komutlar güncellenmiş olabilir).
Adım 1 - Zamanlı olarak çalışacak Script dosyasını oluştur:
#!/bin/bash
USERNAME="DEPO"
PASSWORD="ABC1234"
HOST="DEPO.local"
SHARE="YEDEKLER"
REMOTE_PATH="afp://$HOST/$SHARE"
MOUNT_PATH="/Volumes/YEDEKLER"
# Once mevcut baglantilari kontrol et ve temizle
if mount | grep -q "$MOUNT_PATH "; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Mevcut baglantilar temizleniyor..." >> /tmp/ayhan_mountlanlog.log
mount | awk -v mp="$MOUNT_PATH" '$3 ~ mp {print $3}' | while read vol; do
diskutil unmount force "$vol"
echo "$(date '+%Y-%m-%d %H:%M:%S') $vol unmount edildi" >> /tmp/ayhan_mountlanlog.log
done
sleep 2
fi
# Hala MOUNT_PATH klasoru varsa ve bossa sil (bu mavcut agdaki klasoru degil, volume altindaki baglanti klasorunu siler)
if [ -d "$MOUNT_PATH" ] && [ -z "$(ls -A "$MOUNT_PATH")" ]; then
rm -rf "$MOUNT_PATH"
echo "$(date '+%Y-%m-%d %H:%M:%S') $MOUNT_PATH klasoru bos ve silindi" >> /tmp/ayhan_mountlanlog.log
fi
# Mount edilmemis ise klasore baglan
if ! mount | grep -q "$MOUNT_PATH "; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Baglanmaya calisiliyor..." >> /tmp/ayhan_mountlanlog.log
# Klasoru Ac
open "afp://$USERNAME:$PASSWORD@$HOST/$SHARE"
sleep 5
else
echo "$(date '+%Y-%m-%d %H:%M:%S') Zaten bagli, tekrar baglanmaya gerek yok." >> /tmp/ayhan_mountlanlog.log
fi
# Mount basarili mi
if mount | grep -q "$MOUNT_PATH "; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Basariyla baglandi." >> /tmp/ayhan_mountlanlog.log
else
echo "$(date '+%Y-%m-%d %H:%M:%S') Baglanamadi!" >> /tmp/ayhan_mountlanlog.log
fi
# Her durumda scriptin calistigini logla
echo "$(date '+%Y-%m-%d %H:%M:%S') SCRIPT FINISH" >> /tmp/ayhan_mountlanlog.log
exit 0
Bu dosyayı oluşturup aşağıdaki konuma kaydedin:
/usr/local/bin/ayhan_mount_lan_folder.sh
Not: Scriptin konumu root yetkileri ile erişilebilecek bir konum olması gerektiği için bin klasörü olarak belirlendi, masaüstü gibi kullanıcıya özel klasörlerde yetki hataları vermektedir. Ayrıca MOUNT_POINT ve REMOTE_PATH konumlarını, sizin bağlanmak istediğiniz ağ ve klasör konumuna göre değiştirin.
Adım 2 - Launchd yöntemi için Plist dosyasını oluştur:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ayhan.mountlanfolder</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/usr/local/bin/ayhan_mount_lan_folder.sh</string>
</array>
<key>StartInterval</key>
<integer>600</integer>
<key>StandardOutPath</key>
<string>/tmp/ayhan_mountlanfolder_out.log</string>
<key>StandardErrorPath</key>
<string>/tmp/ayhan_mountlanfolder_err.log</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Bu dosyayı aşağıdaki konuma kaydedin:
/Library/LaunchDaemons/com.ayhan.mountlanfolder.plist
Not: Bazı yerlerde bu plist dosyasını LaunchAgents klasörüne kaydedin demiş ama ben denedim ve olmadı. Bu nedenle root yetkileri olan LaunchDaemons klasörüne kaydedilmesi gerekmektedir. StartInterval değerini 600 yani 10 dakika belirledim fakat siz değiştirebilirsiniz. Bu bölümü aşağıdaki şekilde değiştirerek belli saatleri de yazabilirsiniz:
<key>StartCalendarInterval</key>
<array>
<dict><key>Hour</key><integer>5</integer><key>Minute</key><integer>58</integer></dict>
<dict><key>Hour</key><integer>11</integer><key>Minute</key><integer>58</integer></dict>
<dict><key>Hour</key><integer>17</integer><key>Minute</key><integer>58</integer></dict>
<dict><key>Hour</key><integer>23</integer><key>Minute</key><integer>58</integer></dict>
</array>
Adım 3 - Terminalden yapılacak işlemler:
Sahiplik ve izinleri ayarla:
chmod +x ayhan_mount_lan_folder.sh
sudo chown root:wheel /Library/LaunchDaemons/com.ayhan.mountlanfolder.plist
sudo chmod 644 /Library/LaunchDaemons/com.ayhan.mountlanfolder.plist
Launchd servisini başlat (plist dosyasında bir değişiklik olursa bu komutlar tekrar çalıştırılmalı):
sudo launchctl unload /Library/LaunchDaemons/com.ayhan.mountlanfolder.plist 2>/dev/null
sudo launchctl load /Library/LaunchDaemons/com.ayhan.mountlanfolder.plist
Adım 4 - Kontrol et:
/tmp konumunu aç ve log dosyalarını kontrol et. ayhan_mountlanlog.log dosyası oluşmuş ve basarili olarak kayıt düşüyorsa her şey yolundadır. Ayrıca ağ konumuna bağlantıyı kesip tekrar bağlantı kurulup kurulmadığını da test edebilirsiniz.
İlk çalışma sırasında ağ konumuna bağlantı için gerekli bir şifre varsa onu sorabilir veya erişim izni isteyebilir. İzinleri verin ve şifre isterse girip hatırla kutucuğunu işaretleyin, böylece şifre Keychain içine kaydedilecek ve tekrar sormayacaktır.
Son güncelleme: 14/07/2025