Nur-Ein-Blogger
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Hallo, ich würde gern ein Script beim systemstart ausführen.
Daher dachte ich an @reboot 1. Crontab-Eintrag
| echo "@reboot /root/cronjobs/test.sh" >> /etc/crontab
|
2. test.sh
| @reboot echo "hi" > /root/reboot.txt 2>&1
|
3. Ausführbar machen
| chmod ugo+x /root/cronjobs/test.sh
|
4. reboot
5. Anzeige Datei
nix da.... Kann mir jemand auf die Sprünge helfen bitte? LG
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
Da Du schon auf 17.10 bist, würde ich eher eine Systemd-Unit dafür definieren. Das erlaubt Dir auch, Abhängigkeiten zu definieren, so dass Dein Skript erst läuft, wenn alle Teile des Systems vorhanden sind, die dafür gebraucht werden (siehe auch die Anmerkung zu @reboot auf der Manpage).
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Ich benötige keine Abhänigkeiten. Aber gut zu wissen für andere Umsetzungen. Würde mich trotzdem interessieren, wieso meine Ausführung nicht funktioniert :/
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13893
|
Nur-Ein-Blogger schrieb: Würde mich trotzdem interessieren, wieso meine Ausführung nicht funktioniert :/
Wie ist die Ausgabe von:
cat /etc/crontab
?
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | root@:~# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
@reboot /root/cronjobs/test.sh
root@:~#
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13893
|
Nur-Ein-Blogger schrieb: #
@reboot /root/cronjobs/test.sh
root@:~#
Versuch mit (als letzte Zeilen):
@reboot root /root/cronjobs/test.sh
# - - -
und evtl. ohne die Zeile "root@:~#". EDIT: Hast Du diese "#!/bin/bash" shebang in deinem Script?
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
root@:~# ist schon wieder außerhalb der Datei. das steht nicht drinnen.
Nein, der crontab hat keine shebang zeile, versuche es mal in der ausgabe der reboot.txt steht jetzt:
| /root/cronjobs/test.sh: Zeile 2: @reboot: Kommando nicht gefunden.
|
Inhalt der test.sh
| #!/bin/bash
@reboot echo "hi" > /root/reboot.txt 2>&1
|
Lösung:
Ja klar. In der test.sh darf natürlich nicht @reboot stehen....nicht mein Tag heute. Danke für die Hilfe
LG
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13893
|
Nur-Ein-Blogger schrieb: Inhalt der test.sh
| #!/bin/bash
@reboot echo "hi" > /root/reboot.txt 2>&1
|
"@reboot" ist im Script nicht erforderlich. Für echo & Co., besser die absoluten Pfade verwenden.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Nur-Ein-Blogger schrieb: @reboot /root/cronjobs/test.sh
Der Eintrag ist falsch, da der Username fehlt. Beachte: In der /etc/crontab muss man den User mit angeben, in den eigentlichen Nutzer-Crontabs nicht. Ich empfehle aber die Nutzung von Nutzer-Crontabs. Diese liegen unter /var/spool/cron/crontabs und werden mit folgendem Kommando bearbeitet:
crontab -u $USER -e
Dort sind keine Usernamen anzugeben.
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Also
@reboot root /root/cronjobs/test.sh
Oder
@reboot user_allow_run_script /root/cronjobs/test.sh
? Denn ohne Angabe User hat es trotzdem geklappt gehabt.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Nur-Ein-Blogger schrieb: Also
@reboot root /root/cronjobs/test.sh
Oder
@reboot user_allow_run_script /root/cronjobs/test.sh
Das kommt darauf an, unter welchem Benutzer das Skript ausgeführt werden soll.
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Das Script läuft unter dem root benutzer.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Nur-Ein-Blogger schrieb: Das Script läuft unter dem root benutzer.
Dann
@reboot root /root/cronjobs/test.sh
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Okay, danke. Nun hat mich Systemd doch noch interessiert. Wäre diese Umsetzung richtig?:
# Start script after service mysql ist starts!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
cat >> /root/cronjobs/startmailman.sh << 'EOF1'
#!/bin/bash
#Please check the license provided with the script!
#-------------------------------------------------------------------------------------------------------------
cd /etc/mailman
npm start 2>&1
EOF1
cat >> /etc/systemd/system/mailman_systemd.service << 'EOF1'
[Unit] After=mysql.service
[Service]
ExecStart=/root/cronjobs/startmailman.sh
[Install]
WantedBy=default.target
EOF1
chmod 744 /root/cronjobs/startmailman.sh
chmod ogo+x /root/cronjobs/startmailman.sh
systemctl daemon-reload
systemctl enable mailman_systemd.service
|
|