脚本在启动时不起作用,但手动运行时起作用

脚本在启动时不起作用,但手动运行时起作用

我编写了一个脚本,用于加载 VHD 文件,使用 对其进行修复,ntfsfix以便可以将其挂载为 rw,然后将其挂载。当使用 通过终端运行此脚本时,效果非常好,但当通过或通过启动应用程序sudo运行它时,它不起作用。有问题的脚本是crontab~/.profile

#!/bin/sh
rmmod nbd
modprobe nbd max_part=16
qemu-nbd -c /dev/nbd0 '/media/tygo/1.8TB Drive/MEGA.vhdx' 
ntfsfix /dev/nbd0p2
mount -o rw /dev/nbd0p2 /home/tygo/MEGA

答案1

要使用 crontab 运行脚本,请确保指定完整路径:

#!/bin/sh
/usr/sbin/rmmod nbd
/usr/sbin/modprobe nbd max_part=16
/usr/bin/qemu-nbd -c /dev/nbd0 '/media/tygo/1.8TB Drive/MEGA.vhdx' 
/usr/bin/ntfsfix /dev/nbd0p2
/usr/bin/mount -o rw /dev/nbd0p2 /home/tygo/MEGA

whereis您可以使用命令查找路径: whereis mount

然后使用sudo:运行 crontabsudo crontab -e并将完整路径添加到脚本:

@reboot /home/user/scripts/vhdscript.sh

利用你自己的时间而不是@reboot

要查看它是否被执行,您可以向脚本添加一些其他信息。例如,在脚本末尾添加:

echo "VHD file loading have been completed" | logger

然后,使用终端,通过出现的消息监视脚本的执行情况:

journalctl -f | grep VHD

答案2

我最终设法修复了这个问题,方法是在使用 qemu 加载 VHD 后休眠一秒钟,然后每半分钟使用 cronjob 和 sudo 运行它,使用以下两行:

* * * * * sudo /etc/megaMount.sh > /var/log/megaMount.log
* * * * * (sleep 30; sudo /etc/megaMount.sh > /var/log/megaMount.log)

编辑后的脚本如下,第一行检查是否已经挂载:

if ! grep -qs '/home/tygo/MEGA' /proc/mounts; 
then 
        sleep 1
        rmmod nbd
        modprobe nbd max_part=16
        qemu-nbd -c /dev/nbd0 '/media/tygo/1.8TB Drive/MEGA.vhdx' 
        sleep 1
        ntfsfix /dev/nbd0p2
        mount -o rw /dev/nbd0p2 /home/tygo/MEGA
fi

编辑:忘了提及使用添加作业sudo crontab -e,不太清楚为什么我还需要使用运行脚本sudo,但没有它就无法工作。

相关内容