systemctl 과 pm2를 비교하면 명령어가 쉽다는거...? display를 예쁘게 해준다는거? 이 두 개 정도가 많이 아쉽다.
또 아쉬운 것은 pm2 start "명령어" 치면 바로 그냥 시작을 해준다는 거...
pm2 start정도로 쉽진 않지만 그래도 pm2는 자체버그가 많아서 간간이 탈을 내는 편임. 다시 systemctl --user로 돌아옴. 다만 wrapper를 작성했다.
#!/usr/bin/perl
my $scu = "systemctl --user";
my $cmd = shift;
my $args = join(' ', @ARGV);
if ($cmd eq "") {
system("$scu list-unit-files --type=service");
system("$scu list-units --type=service --all");
}
elsif ($cmd eq "ls") {
system("$scu list-unit-files --type=service");
system("$scu list-units --type=service --all");
}
elsif ($cmd eq "status" || $cmd eq "st") {
system("$scu status $args");
}
elsif ($cmd eq "log") {
my $unit = shift;
my $multitail = "multitail -cS zarafa -J";
if ($unit) {
system("journalctl --user -f -u $unit | $multitail");
}
else {
system("journalctl --user -f | $multitail");
}
}
else {
system("$scu $cmd $args");
system("$scu list-units --type=service --all");
}
일단 이 정도면 그런대로 대충 쓸만하다. 결국 가장 큰 문제가, 명령어가 너무 길고, 무슨 서비스가 있는지 모른다는 점인데 이 정도면 그럭저럭 극복 됨.
multitail 명령어가 없으면 그냥 | $multitail 부분은 없애도 되는데 색깔이 안 입혀져서 조금 아쉬울 것이다.
2023-04-28:
#!/usr/bin/env python
import sys
import subprocess
def ls():
unit_files = subprocess.run(f"{scu} list-unit-files --type=service", stdout=subprocess.PIPE, shell=True, text=True).stdout.splitlines()
units = subprocess.run(f"{scu} list-units --type=service --all", stdout=subprocess.PIPE, shell=True, text=True).stdout.splitlines()
blacklist = [
"static",
"systemd-tmpfiles-setup.service",
"dbus.service",
"dirmngr.service",
"gpg-agent.service",
"pk-debconf-helper.service",
"snapd.session-agent.service",
]
for line in unit_files:
if not any(s in line for s in blacklist):
print(line)
for line in units:
if not any(s in line for s in blacklist):
print(line)
if __name__ == "__main__":
scu = "SYSTEMD_COLORS=1 systemctl --user"
cmd = sys.argv[1] if len(sys.argv) > 1 else ""
args = " ".join(sys.argv[2:])
if cmd == "":
subprocess.run(f"{scu} list-unit-files --type=service", shell=True)
subprocess.run(f"{scu} list-units --type=service --all", shell=True)
elif cmd == "ls":
ls()
elif cmd in ["status", "st"]:
subprocess.run(f"{scu} status {args}", shell=True)
elif cmd == "log":
unit = sys.argv[2] if len(sys.argv) > 2 else ""
multitail = "multitail -cS zarafa -J"
if unit:
subprocess.run(f"journalctl --user -f -u {unit} | {multitail}", shell=True)
else:
subprocess.run(f"journalctl --user -f | {multitail}", shell=True)
else:
subprocess.run(f"{scu} {cmd} {args}", shell=True)
ChatGPT써서 파이썬으로 만들고 좀 개선을 했다. blacklist 넣어서 귀찮은거 안 보이게 만듦.