PDA

View Full Version : Unstoppable



sn0wflake
12-02-2003, 02:40 AM
Is it possible to write a script, that works with an "out-of-the-box" Knoppix 3.3 harddisk installation, that executes a program. Once the program is closed, the scripts restarts the program.
Can this script be made?

sn0wflake
12-02-2003, 02:42 AM
PS: I'm not lazy. I just don't know what scripting language to use. Please initiate me :)

abouzeis
12-02-2003, 02:58 AM
Simple, use c++
"
#include <iostream>

using name space std;

void main()
{
system("your program path goes here");
main();
}
"

this will run your program, after that quits it will run the main function and that will run the program and so on for ever.

sn0wflake
12-02-2003, 03:02 AM
So all I do is create a text file, insert the code, and chmod it executable? Please don't smirk, I'm a newbie.

dicej
12-02-2003, 03:37 AM
Since it's C++, you'll need to compile it first. Put it in a file called forever.cpp and run "g++ forever.cpp -o forever", and you will have an executable called "forever". Careful though - the "#include" line should read "#include <iostream>" (your web browser may think <iostream> is HTML). Oh, and no space between "name" and "space" in "namespace".

If you want to avoid C++, you can use the following bash script:


#!/bin/bash

function doStuff {
# your code or program call goes here
doStuff
}

doStuff

Type "man bash" in your shell to learn more about bash.

sn0wflake
12-02-2003, 03:48 AM
Thank you all. I feel like a masochist because I hate ignorance :lol:

sn0wflake
12-02-2003, 04:00 AM
Oh my, Bash resembles a mixture of Windows batch files and PHP. Smooth :)

baldyeti
12-02-2003, 09:15 AM
Erhm, sorry but neither of the proposed solutions seem to match the original
requirement, which implies looping. C++ sure is overkill here, a simple shell
(bash) script will do:

while true
do
# your program invocation here
done

jeramy
12-02-2003, 05:40 PM
With that C++ program, I think it would generate a stack overflow error eventually since it's a recursive function. Possibly the first bash script, too (although I don't know enough about bash to tell you either way).

I'm curious to what program you plan on running. :)

You don't want it to run to the exclusion of all other programs, like a kiosk, do you?

sn0wflake
12-02-2003, 06:51 PM
I'm very interested in an easy way to set up a kiosk. The program I wish to run recursively is rdesktop. It has to be recursive because logging out of Windows also quits rdesktop.

sn0wflake
12-03-2003, 04:34 PM
baldyeti: Your Bash script works like a charm :) Thank you for introducing me to Bash.

Dave_Bechtel
12-05-2003, 02:56 AM
--Geez, this guy is a newb and somebody is pointing him to C? (shudder)

--REAL men put this kind of thing in inittab. :twisted:

o Edit /etc/inittab as root

o Look for " id:5:initdefault: " - the 5 is your default runlevel

--Add a line (further down, after the /sbin/getty lines) saying something like:
" rd:5:respawn:/usr/X11R6/bin/rdesktop -OPTIONS"

--Re-init: ' kill -hup 1 ' == Tells init to re-read inittab

--This fulfills all requirements. :) It will run the script on boot and respawn it if it gets killed. See ' man inittab ' for more details.

--HOWEVER... Since it's dealing with X, I'd stick to baldyeti's script since it's already working for you. ;-) Consider this as an example for future reference. (I don't think you want to run rdesktop as root anyway, altho there are ways to get around this.)

--Anyhow, to run baldyeti's script every time on boot: Example, it lives in /usr/local/bin/baldyeti:

o ' cd /etc/rc5.d ' == This is where the scripts for runlevel 5 get run

o ' ln /usr/local/bin/baldyeti S98baldyeti -sfn ' == Make symbolic link to start the prog near end of boot process (WNG: I haven't tested this, as I've never used rdesktop.)

o If you do an ' ls -l ' now you should have:
lrwxrwxrwx 1 root root 22 Jun 28 23:04 /etc/rc5.d/S98baldyeti -> /usr/local/bin/baldyeti

( Side note - every time I see baldyeti's nick in teh forum I have to smile -- it reminds me of http://www.northpolesantaclaus.com/heat_miser.htm ) :lol:


baldyeti: Your Bash script works like a charm :) Thank you for introducing me to Bash.

sn0wflake
12-05-2003, 03:59 AM
My kiosk finally works! C looked like overkill for such a simple task and why not harvest some internal Linux power like Bash or inittab :) I'll definitely try to get the inittab example to work because loading KDE seems redundant and creates more problems in this case.
Now all I have is some tweaking problems that should be very easy for you Guru's:

1) When booting I get a LILO boot screen (me thinks) where I can select which OS to load. Can I disable that or set the timeout to 0?
2) When loading Linux I get an annoying message regarding selection of screen mode (the screen is also f**ked up in KDE but I'll save that for another posting). How can I define the screen mode?
3) How do I change the network name from the default Linux/Samba name?

PS: rdesktop in KDE is not run as root. Even a noob knows that would be silly :)

sn0wflake
12-05-2003, 04:07 AM
PS: PS: Ill be Ghosting 20 PC's that, fortunately, are identical. But how would Linux react when being Ghosted to a different PC?

L2Cache
12-05-2003, 08:35 AM
>1) When booting I get a LILO boot screen (me thinks) where I can select which OS to load. Can I disable that or set the timeout to 0?

As root, edit /etc/lilo.conf and then run: /sbin/lilo

For example, if the first part looks like:
prompt
timeout=50
default=Knoppix
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32

comment out the prompt and timeout lines. If there is a vga=ask line, comment out that one too.

Dave_Bechtel
12-05-2003, 09:40 PM
--In LILO, set ' vga=normal ' to avoid the extra prompt.

--Also set "DELAY=10" to bring the boot-time delay down to 1 second. It will still give you enough time to hit something if you need to enter extra kernel parms on an ad-hoc basis.

--Duplicating the install to different machines should work OK (test *ONE* dupe machine 1st!!) as long as they have different network addresses and machine names. Check /etc/hostname and /etc/hosts.

--For a kiosk, you should also disable Ctrl-Alt-Backspace in the X server so they can't kill it, and disable Ctrl-Alt-Del in /etc/inittab so they can't shut the box down.

--Some googles:
http://librenix.com/?inode=1202
http://security.linux.com/howtos/Kiosk-HOWTO-3.shtml == (Outdated)
http://www.knoppix.net/forum/viewtopic.php?t=6202



My kiosk finally works! C looked like overkill for such a simple task and why not harvest some internal Linux power like Bash or inittab :) I'll definitely try to get the inittab example to work because loading KDE seems redundant and creates more problems in this case.
Now all I have is some tweaking problems that should be very easy for you Guru's:

1) When booting I get a LILO boot screen (me thinks) where I can select which OS to load. Can I disable that or set the timeout to 0?
2) When loading Linux I get an annoying message regarding selection of screen mode (the screen is also f**ked up in KDE but I'll save that for another posting). How can I define the screen mode?
3) How do I change the network name from the default Linux/Samba name?

PS: rdesktop in KDE is not run as root. Even a noob knows that would be silly :)