分类目录归档:Linux

在systemd unit里执行需要TTY的程序

总有那么几个程序一定要用ncurses在终端画窗口,即使它完全可以在后台运行。这时候我们就需要欺骗它一下,假装它在一个TTY里面运行。有两点需要设置:

  • 设置环境变量TERM=linux
  • 用script程序来假装外面有个TTY

例如一个简单的rtorrent (<0.9.7) systemd unit设置:

# cat [email protected] 
[Unit]
Description=rTorrent
After=network-online.target

[Service]
User=%i
Environment=TERM=linux
ExecStartPre=/bin/sh -c "/usr/bin/mkdir -p \"$HOME/.local/share/rtorrent/session\""
ExecStart=/usr/bin/script -qefc '/usr/bin/rtorrent -s $HOME/.local/share/rtorrent/session -o session=$HOME/.local/share/rtorrent/session' /dev/null
WorkingDirectory=~
Restart=on-failure

[Install]
WantedBy=multi-user.target

注:rtorrent 0.9.7开始可以用-o system.daemon.set=true,所以不需要这么麻烦:

# cat [email protected] 
[Unit]
Description=rTorrent
After=network-online.target

[Service]
User=%i
ExecStartPre=/bin/sh -c "/usr/bin/mkdir -p \"$HOME/.local/share/rtorrent/session\""
ExecStart=/bin/sh -c "/usr/bin/rtorrent -s $HOME/.local/share/rtorrent/session -o session=$HOME/.local/share/rtorrent/session -o system.daemon.set=true"
WorkingDirectory=~
Restart=on-failure

[Install]
WantedBy=multi-user.target

Proxmox VE 5.4不停机修改主机名

今天修理一台坏掉的Proxmox VE。打开网页管理面板一看,本来是单节点工作的机子上显示了两个节点,但是corosync并没有在运行。更为诡异的是,其中一个节点显示了本机的存储池,另一个节点显示了本机的虚拟机,各种状态API则是有的好有的坏。检查后发现,这台机子的主机名被人改过,但是PVE的一些设置没有同步,导致API出现了各种问题。这里就体现出了PVE的缺点:有些地方过度设计(例如用DNS查询来寻找所有节点),有些地方欠缺考虑(例如主机名不和系统同步),有些地方文档几乎没有。

经过研究,单节点的PVE修改主机名还算简单,只需要将几个不同地方的配置文件同步上即可。至于集群的PVE主机,我的建议是能少折腾尽量少折腾,毕竟身体最重要。

继续阅读