
Aufgrund widersprüchlicher und sich ständig ändernder Berechtigungen für gemountete Laufwerke (die aufgrund der Entwicklungsstruktur von Programmen nicht einfach gelöst werden können) gibt es ein Skript, das mit Root-Berechtigungen ausgeführt werden muss.
Dies ist mit möglich sudo /usr/serverm1/lsintd
und liefert gute Ergebnisse. Wir möchten dieses Skript jedoch automatisch beim Start ausführen.
Das Ausführen des Skripts unter unserem Hauptbenutzer beim Start führt aufgrund unzureichender Berechtigungen zu einem Core Dump. Daher dachten wir, wir könnten es in crontab wie @reboot /usr/serverm1/lsintd
vorgeschlagen einstellenHier, allerdings wird es mit den Einstellungen und der Konfiguration vom Root-Benutzer (der nicht vorhanden ist) ausgeführt.
TLDR: Wie können wir das Skript genau so ausführen, wie es mit dem Befehl sudo /usr/serverm1/lsintd
beim Start ausgeführt würde?
Ich habe auch versucht, es chmod u+x
auf die Binärdatei anzuwenden, aber dies führte immer noch zu einem Core Dump, als ob es mit regulären Berechtigungen ausgeführt worden wäre (Idee übernommen ausLassen Sie einen Benutzer ein Skript mit Root-Berechtigungen ausführen).
Randnotiz:Ich gebe zu, dass es sich hierbei um ein XY-Problem handelt, aufgrund der langsamen und schlecht organisierten Entwicklungsstruktur einiger der anderen Dienste auf unserem Server haben wir jedoch keine Möglichkeit, die Grundprobleme zu lösen und müssen stattdessen einen Workaround finden.
Antwort1
Eine Möglichkeit wäre, eine systemd-Einheit zu erstellen.
Alle möglichen Optionen finden Sie hier:www.freedesktop.org/.../systemd.unit.html
aber ich werde ein einfaches Beispiel vorstellen:
1.Erstellen wir ein Bash-Skript, das Datum und Uhrzeit jedes Systemstarts in die Datei schreibt: /root/file
Nur der Benutzer hat die Berechtigung, Dateien im Verzeichnis root
zu schreiben und zu bearbeiten . Ich werde den Benutzer mit ändern . Erstellen wir ein Skript und machen es ausführbar/root
root
sudo su -
/root/timelog.sh
chmod +x /root/timelog.sh
#!/bin/bash
if ! [ /root/file ]; then touch /root/file; fi
echo $(date) >> /root/file
2.Jetzt brauchen wir die System Unit
Datei:/etc/systemd/system/timelog.service
[Unit]
Description=timelog.service
[Service]
Type=oneshot
ExecStart=/root/timelog.sh
[Install]
WantedBy=multi-user.target
3. Als letztes muss sichergestellt werden, dass es mit dem System startet:
systemctl enable timelog