我有一台机器,除了其他服务外,还需要运行服务器虚拟机。我正在使用以下程序运行虚拟机:
qemu-system-x86_64 -nographic \
-enable-kvm \
-m 8G \
-smp 2 \
-hda gw_disk.qcow2
这是脚本start.sh
,然后我在根 crontab 上有sudo crontab -e
:
@reboot cd /disk/folder && setsid ./start.sh
重启后我查看/var/log/syslog
并得到了以下信息:
(CRON) INFO (Running @reboot jobs)
(root) CMD (cd /disk/folder && setsid ./start.sh)
(CRON) info (No MTA installed, discarding output)
我找不到该过程ps -o pid,sess,cmd afx | grep qemu
知道我遗漏了什么吗?谢谢
答案1
这里有几件事让我印象深刻
考虑安装
libvirt
其virsh
或类似的东西,这样你就可以在虚拟机周围有一个管理层捕获 crontab 条目的输出。它会告诉您有输出,但无法通过电子邮件发送给您(“信息(未安装 MTA,丢弃输出)“)。您可以将其写入系统记录器或直接写入文件:
# Direct to a logfile (remember to rotate/truncate it periodically) @reboot ( echo "Starting: $(date)"; cd /disk/folder && setsid ./start.sh ) >>/var/log/startvm.log 2>&1 # To the logger subsystem (usually ends up in /var/log/user.log) @reboot ( cd /disk/folder && setsid ./start.sh ) 2>&1 | logger -t startvm
考虑使用 systemd 单元来启动进程,而不是启动时 crontab 条目。当然,最初会更复杂,但一旦拥有它,维护起来会更容易,并且具有更好的日志记录和故障报告
参考:
- 使用 systemd 在引导时启动 Linux 服务在 Akamai/Linode 上
- 如何使用 systemd 在启动时运行单个命令?在 Ask Ubuntu 上